Wyszukiwanie liczb w tablicy

0

Witam wszystkich,
mam program składający się z dwóch plików Tablice.java i Main.java które wyglądają następująco:

Tablice.java:

package tablice;

import java.io.IOException;
import javax.swing.JOptionPane;
  
public class Tablice{
public static void czytajTab(int t[][] ) {
int i,j;
String odp;
for(i=0; i<t.length; i++){
    for(j=0; j<t[i].length; j++){
            
        odp=JOptionPane.showInputDialog("Podaj"+(i+1)+"element tablicy");
         
        
    t[i][j]=Integer.parseInt(odp);
}
}
}
public static void drukTab(int t[][] , String tekst) throws IOException{
String wynik;
int i,j;
wynik=" ";
for(i=0; i<t.length; i++)
    for(j=0; j<t[i].length; j++)
wynik+=t[i][j]+" ";
JOptionPane.showMessageDialog (null, wynik, tekst, 1);


}
}

Main.java

package tablice;

import java.io.IOException;


public class Main {
public static void main(String[] args) throws IOException{
  int i,j; 
int  tablica [][]=new int[3][2];
Tablice.czytajTab(tablica);
Tablice.drukTab(tablica, "oto elementy tablicy");

}
}

Mam taką treść zadania:
Napisz program wybierający z każdego wiersza tablicy dwuwymiarowej największą wartość,
a następnie wybierający najmniejszą wartość spośród wyszukanych elementów.

Mam problem bo nie wiem jak się do tego zabrać :/ . Robiłem podobny program w C++, wtedy posortowałem liczby od najmniejszej do największej i wypisałem największą. Czy tutaj też tak trzeba zrobić a może jest inny, prostszy sposób. Gdzie powinienem dołączyć ten fragment kodu, czy może muszę stworzyć kolejny plik?? Może macie gotowy fragment do takiego przypadku lub przykład na którym można analogicznie się wzorować

0

Jaki jest problem z wybraniem max z tablicy? o_O

int max = tab[0]; //zakladamy ze pierwszy element to minimum
for(int i=1;i<dlugosctab;i++) //przeglądamy calą tablicę
  if(tab[i]>max) //jeśli znaleźliśmy większą liczbę
    max=tab[i]; //to zapisujemy nowy max

W twoim przypadku robisz tak dla każdego wiersza i zapisujesz te wartości w nowej tablicy. Następnie z nowej tablicy wybierasz minimum na zasadzie:

int min = tab[0];
for(int i=1;i<dlugosctab;i++)
  if(tab[i]<min)
    min=tab[i];

Takie rozwiązanie daje nam O(n) a nie O(nlogn) jak to z sortowaniem...

0

Wszystko dobrze tylko że to jest dobre gdybym miał tablicę jednowymiarową a mam dwuwymiarową, to będzie chyba trochę inaczej wyglądało :/. Poza tym to ja mam to dołączyć ten kod na końcu w pliku Tablice.java, a później odwołać się w Main.java?? tak??

0

Nie będzie wyglądalo inaczej. Będzie tylko dodatkowa pętla. Dodatkowo maxy musisz zapisać w nowej tablicy a potem wybrać z tej tablicy (jednowymiarowej!) minimum.
Możesz to wstawić do jakiejś metody albo po prostu dopisać do main(), obojętne.

0
package test;

public class Main {

    public static void main(String[] args) {
        int[][] tablica = new int[10][10];
        int minimumZMaksimówWRzędach = 0;
        for (int i = 0; i < 10; i++) {
            int maksimumWRzędzie = 0;
            for (int j = 0; j < 10; j++) {
                tablica[i][j] = 10 + (int) (Math.random() * 90);
                if (j == 0) {
                    maksimumWRzędzie = tablica[i][j];
                } else {
                    maksimumWRzędzie = Math.max(maksimumWRzędzie, tablica[i][j]);
                }
                System.out.print(" " + tablica[i][j]);
            }
            if (i == 0) {
                minimumZMaksimówWRzędach = maksimumWRzędzie;
            } else {
                minimumZMaksimówWRzędach = Math.min(minimumZMaksimówWRzędach, maksimumWRzędzie);
            }
            System.out.println();
        }
        System.out.println(minimumZMaksimówWRzędach);

    }

}

Niezbyt eleganckie ale bezpiecznie się refaktoruje ;]

0

Dziękuję ślicznie za pomoc ;-P

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