tablice dwuwymiarowe - Jak znaleźć największą i najmniejszą liczbę w tablicy dwuwymiarowej?

0

Część
mam za zadanie zrobić:
zadeklaruj macierz o wymiarach 5x8, wypelnij ja liczbami losowymi z zakresu 10-90, znajdz najwieksza i najmniejsza wartosc oraz srednia arytmetyczna sprawdz czy wiecej jest liczb mniejszych od 50 czy wiekszych badz rownych 50.

mój kod na ten moment wyglada następująco:

int[][] macierz6 = new int[5][8];
Random rand = new Random();
int min = Integer.MIN_VALUE;
int max = Integer.MAX_VALUE;
int aryt = 0;
int wiecej = 0;
int mniej = 0;

for (int i = 0; i < macierz6.length; i++) {
    for (int j = 0; j < macierz6[i].length; j++) {
        macierz6[i][j] = rand.nextInt(10, 90);
        System.out.print(macierz6[i][j] + " ");
        aryt += ((macierz6[i][j]) / (5 * 8));
    }
    System.out.println();
    for (int[] numbers : macierz6) {
        for (int number : numbers) {
            if (number < max) {
                max = number;
            }
            if (number > min) {
                min = number;
            }
        }
    }
    for (int[] liczby : macierz6) {
        for (int liczba : liczby) {
            if (liczba >= 50) {
                wiecej++;
            }
            if (liczba < 50) {
                mniej++;
            }
        }
    }
}
System.out.println("arytmetyczna: " + aryt);
System.out.println("najmniejsza liczba: " + max);
System.out.println("najwieksza liczba: " + min);
System.out.println("wiecej niz 50: " + wiecej);
System.out.println("mniej niz 50: " + mniej);

w konsoli dostaje taka informacje zwrotna:

78 65 87 78 67 37 16 55 
44 61 75 76 85 35 67 83 
56 76 18 19 80 69 84 48 
21 44 38 81 72 44 74 19 
12 48 26 22 31 72 87 53 
arytmetyczna: 35
najmniejsza liczba: 0
najwieksza liczba: 87
wiecej niz 50: 78
mniej niz 50: 122

i problem mam z:
najmniejsza liczba
liczba powyżej 50 i poniżej 50

będę wdzięczny za podpowiedź :)

2

Pomyliłeś min z max. Pętle do liczenia "wiecej" i "mniej", które przechodzą po całej macierzy, umieściłeś w środku pętli for (int i = 0; i < macierz6.length; i++) i dlatego dostajesz za duży wynik.

Gorąco sugeruję, abyś nauczył się uważnie analizować swój kod i go debugować, tj. sprawdzać czy dany kawałek kodu robi to, co powinien, np. dodając println do wypisywania wartości zmiennych. Bo no offense, ale ten babol z min i max nawet widać na goły rzut oka :)

2

Po pierwsze podziel kod na metody. Rozdziel tworzenie tablicy od operowania na niej. Obecnie twoje obliczenia robią dokładnie nie to co oczekujesz:

for (int i = 0; i < macierz6.length; i++) {
    for (int j = 0; j < macierz6[i].length; j++) {
        macierz6[i][j] = rand.nextInt(10, 90);
        System.out.print(macierz6[i][j] + " ");
        aryt += ((macierz6[i][j]) / (5 * 8));
    }
//…
}

Dla każdego rzędu w macierzy wyznaczasz losowy element, a następnie oddajesz do aryt wartość tego elementu podzieloną przez 40. Dwie rzeczy bez sensu:

  • użycie mnożenia, które wykorzystuje STAŁE, pomimo że używasz macierz6.length i macierz6[i].length. W dodatku przy tworzeniu samej macierzy też wykorzystujesz te liczby. Wywal to do stałych na poziomie klasy.
  • średnią arytmetyczną liczy się w inny sposób. Suma wszystkich elementów przez ich ilość.

Ten kod też jest funkcjonalnie zły, bo wyliczasz ilość większych i mniejszych za każdym razem, gdy wchodzisz do nowego rzędu. Zwróć uwagę, gdzie kończy się pętla po i.

Po drugie, czy musisz zrobić te wszystkie obliczenia w jednym przebiegu? Jeżeli tak, to, jak masz już wygenerowaną macierz, możesz spróbować pokombinować z zagnieżdżoną pętlą. Jeżeli nie masz takiego ograniczenia, to zawsze możesz transformować macierz do formy jednowymiarowej, zamienić na strumień (IntStream) i obliczyć odpowiednie wartości za pomocą metod ze strumienia.

2

Tak poza tym, deklarujesz:

int aryt = 0;

Jaka jest średnia arytmetyczna liczb: 11 i 12 ?

Co otrzymasz?

aryt = (11+12)/2;
System.out.println(aryt);

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