Gdzie jest błąd?

2017-09-04 18:23
0

Program ma za zadanie wyświetlać największą liczbę na pierwszej przekątnej (max) i najmniejszą liczbę na drugiej przekątnej (min). Max wyświetla prawidłowo, natomiast w min cały czas wychodzi zero, chociaż nie ma zera w tablicy.


public static void main(String[] args) {
        // TODO code application logic here
        Random r = new Random();
        int[][] tab;
        int max;
        int min;
        tab = new int[5][5];
        max = tab[0][0];
        min = tab[0][tab.length-1];

        for (int i = 0; i < tab.length; i++){
            for (int j = 0; j < tab[i].length; j++){
                tab[i][j] = r.nextInt(9)+1;
                System.out.print(tab[i][j] + "  ");

                if (i == j){
                    if (tab[i][j] > max) {
                        max = tab[i][j];
                    }
                }
                if (i + j == (tab.length-1)){
                    if (tab[i][j] < min) {
                        min = tab[i][j];
                    }
                }

            }
            System.out.println();
        }
        System.out.println(max);
        System.out.println(min);

    }
edytowany 1x, ostatnio: Chory Benio, 2017-09-04 18:23

Pozostało 580 znaków

2017-09-04 18:34
0

nie znam Javy, ale niezależnie od języka podejrzane jest sumowanie zmiennych iterujących w zagnieżdżonych pętlach i + j

edytowany 1x, ostatnio: grzegorz_so, 2017-09-04 18:39
Dlaczego jest to podejrzane? W taki sposób OP sprawdza, czy aktualnie iterowany punkt znajduje się na przekątnej. - Patryk27 2017-09-04 18:47

Pozostało 580 znaków

2017-09-04 18:48

Jak nie ma, jak jest? ;-)

tab = new int[5][5]; // tab = [[0,0,0,0,0], ...]
max = tab[0][0]; // max = 0
min = tab[0][tab.length-1]; // min = 0

Btw, podziel sobie ten algorytm na dwa etapy: wypełnianie tablicy oraz sprawdzanie przekątnych. Dzięki temu etap drugi będziesz w stanie uprościć (wykorzystując tylko jedną pętlę).


edytowany 1x, ostatnio: Patryk27, 2017-09-04 18:49
Dzięki śmiga :) - Chory Benio 2017-09-04 20:20

Pozostało 580 znaków

2017-09-04 18:54
1

Tak jak napisał Patryk27, Wywal ta linijkę:
min = tab[0][tab.length-1];
Zainincjalizuj min, na przykład, maksymalna wartością integera i będzie śmigać.


Pozostało 580 znaków

2017-09-04 18:57
0

@Patryk27:
jak po sumie indeksów określić czy element znajduje się na przekątnej ?
masz tablicę [0..4, 0..4]
elementy na przekątnej mają sumy indeksów z funkcji suma(x)=x *2, gdzie x to indeks (wiersza, kolumny) czyli np dla x=2 to suma= 4
ale dla wiersza o indeksie 1 i kolumny o indeksie 3 też dostaniemy suma:=x+y=4 , a element nie jest na przekątnej

edytowany 1x, ostatnio: grzegorz_so, 2017-09-04 18:59

Pozostało 580 znaków

2017-09-04 19:00
1
grzegorz_so napisał(a):

@Patryk27:
jak po sumie indeksów określić czy element znajduje się na przekątnej ?
masz tablicę [0..4, 0..4]
elementy na przekątnej mają sumy indeksów z funkcji suma(x)=x *2, gdzie x to indeks (wiersza, kolumny) czyli np dla x=2 to suma= 4
ale dla wiersza o indeksie 1 i kolumny o indeksie 3 też dostaniemy suma:=x+y=4 , a element nie jest na przekątnej

Narysuj sobie kilka macierzy kwadratowych i sprawdź jakie są indeksy na przekątnej od prawego górnego rogu.


edytowany 1x, ostatnio: lion137, 2017-09-04 19:01
zgoda, jeśli to przekątna od prawego górnego rogu :)) dla przekątnej od lewego górnego rogu taki warunek nie sprawdzi się. Podstawową (domyślną) przekątną macierzy jest określona przez elementy z indeksami x=y - grzegorz_so 2017-09-04 19:04
@grzegorz_so: dlatego dla przekątnej od lewego górnego rogu OP utworzył warunek i == j ;-) - Patryk27 2017-09-04 19:06
@Patryk27: masz rację, nie dostrzegłem tego i przeoczyłem że chodzi o obie przekątne:) - grzegorz_so 2017-09-04 19:17

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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