Java tablice

0

Mam tablice 10x10 wypełnioną losowymi liczbami. Chcę znaleźć element tej tablicy, którego suma elementów sąsiadujących jest największa. Nie potrafię zrobić drugiej części zadania - pomocy!

int x = tab[-1][0] + tab[0][1] + tab[1][0] + tab[0][-1] - tak bym zsumował pierwszy element

0

Trochę za mało kodu na początek, żeby pomóc. 1. Pokaż wszystko co napisałeś 2. W tablicy nie masz ujemnych indeksów. 3. O pętlach słyszałeś? :)

0

int x = tab[-1][0] + tab[0][1] + tab[1][0] + tab[0][-1] - tak bym zsumował pierwszy element

Indeks tablicy nie może mieć wartości ujemnej.

0

To mój kod:

    int[][] tab = new int[10][10];
    for(int i=0; i<tab.length; i++){
        for(int j=0; j<tab[i].length; j++){
            tab[i][j] = (int)(Math.random()*10);
            System.out.print(tab[i][j]+" ");
        }
        System.out.println();
    }

    int x = tab[0][1] + tab[1][2] + tab[2][1] + tab[1][0]; // element tab[1][1]
    System.out.println(x);

Element który wychodzi poza, nie podlega analizie. Wiem, że trzeba tutaj skorzystać z pętli, tylko jeszcze nie mam na to pomysłu.

0

Czyli masz już gotowy kawałek kodu pokazujący, jak przejść po każdym elemencie z tablicy (pętla w pętli), by sprawdzić wszystkie sumy i je potem porównać. Musisz tylko zadbać o to, by będąc na "brzegu" nie czytać z nieosiągalnych indeksów. (wychodzących poza zakres tablicy) Na czym konkretnie utknąłeś?

0

Stwórz dodatkową zmienną która będzie posiadała index największej sumy i po normalnie sprawdzasz chodząc po tablicy.

int indexNajx=0;
int indexNajy=0;
int wartoscNaj=0;
/////////////
pętla
{
pętla
{
zabezpieczenie przed błednym adresem w tablicy
if(wartiscNaj > tab[-1][0] + tab[0][1] + tab[1][0] + tab[0][-1] )
{

 indexNajx=i;
 indexNajy=j;
 wartoscNaj=tab[-1][0] + tab[0][1] + tab[1][0] + tab[0][-1] ;

}
}
}

1
package com.java21days;

class SumSides {
    private int[][] tab;

    int[][] make() {
        tab = new int[10][10];

        for(int i=0; i<tab.length; i++){
            for(int j=0; j<tab.length; j++){
                tab[i][j] = (int) (Math.random()*10);
                System.out.print(tab[i][j] + "  ");
            }
            System.out.println();
        }

        return tab;
    }

    int[][] returnTab() {
        return tab;
    }

    boolean checkSides(int i,int j){
        return !(i==0||j==0||i==(tab.length-1)||j==(tab.length-1));
    }

    int sumSides (int i, int j){
        return (tab[i-1][j-1] + tab[i-1][j] + tab[i-1][j+1] +
                + tab[i][j-1] + tab[i][j+1] + tab[i+1][j-1] +
                + tab[i+1][j] + tab[i+1][j+1]);
    }

    public static void main(String[] arguments) {

        int maxSum=0,maxI=0,maxJ=0;

        SumSides tab = new SumSides();
        tab.make();
        for(int i=0; i<tab.returnTab().length; i++){
            for(int j=0; j<tab.returnTab().length;j++){
            if(tab.checkSides(i,j)){
                if(tab.sumSides(i, j)>maxSum){
                maxSum = tab.sumSides(i, j);
                maxI = i;
                maxJ = j;
                }
            }
            }
        }
        System.out.print(maxSum + "..." + maxI + "..." + maxJ);
    }

}

Wydaje mi się, że wszystko dosyć prosto i jasno napisałem w kodzie, jeżeli będą problemy ze zrozumieniem to chętnie odpowiem na pytania dotyczące tego kodu.

0
Daniel Witusowski napisał(a):
package com.java21days;

class SumSides {
    private int[][] tab;

    int[][] make() {
        tab = new int[10][10];

        for(int i=0; i<tab.length; i++){
            for(int j=0; j<tab.length; j++){
                tab[i][j] = (int) (Math.random()*10);
                System.out.print(tab[i][j] + "  ");
            }
            System.out.println();
        }

        return tab;
    }

    int[][] returnTab() {
        return tab;
    }

    boolean checkSides(int i,int j){
        return !(i==0||j==0||i==(tab.length-1)||j==(tab.length-1));
    }

    int sumSides (int i, int j){
        return (tab[i-1][j-1] + tab[i-1][j] + tab[i-1][j+1] +
                + tab[i][j-1] + tab[i][j+1] + tab[i+1][j-1] +
                + tab[i+1][j] + tab[i+1][j+1]);
    }

    public static void main(String[] arguments) {

        int maxSum=0,maxI=0,maxJ=0;

        SumSides tab = new SumSides();
        tab.make();
        for(int i=0; i<tab.returnTab().length; i++){
            for(int j=0; j<tab.returnTab().length;j++){
            if(tab.checkSides(i,j)){
                if(tab.sumSides(i, j)>maxSum){
                maxSum = tab.sumSides(i, j);
                maxI = i;
                maxJ = j;
                }
            }
            }
        }
        System.out.print(maxSum + "..." + maxI + "..." + maxJ);
    }

}

Wydaje mi się, że wszystko dosyć prosto i jasno napisałem w kodzie, jeżeli będą problemy ze zrozumieniem to chętnie odpowiem na pytania dotyczące tego kodu.

Dziękuję, powoli dochodzę do tego jak to działa. Jak bd miał pyt to podpytam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0