Wyszukiwanie liczb w tablicy

szukaj na forum nowy temat odpowiedz

Strona [ 1 ] z 1

tomtaz ten post 09-03-2010 16:36


Użytkownik
Status: Offline
Dołączył: 08-03-2010

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ć
Przejdź na górę strony
cytuj
Shalom ten post 09-03-2010 17:03
avatar

Użytkownik
Status: Offline
Dołączył: 30-01-2004
Skąd: Będzin / Kraków
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...
Non nascuntur sed fiunt christiani :)
Nie masz kłopotów? Kup komputer...

[Na prv/gg przyjmuje tylko zlecenia. Masz problem? Pisz na forum, nie do mnie]

Ostatnio zmodyfikowany: 09-03-2010 17:04 przez Shalom
Przejdź na górę strony
cytuj
tomtaz ten post 09-03-2010 17:22


Użytkownik
Status: Offline
Dołączył: 08-03-2010

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??
Przejdź na górę strony
cytuj
Shalom ten post 09-03-2010 18:26
avatar

Użytkownik
Status: Offline
Dołączył: 30-01-2004
Skąd: Będzin / Kraków
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.
Non nascuntur sed fiunt christiani :)
Nie masz kłopotów? Kup komputer...

[Na prv/gg przyjmuje tylko zlecenia. Masz problem? Pisz na forum, nie do mnie]
Przejdź na górę strony
cytuj
donkey7 ten post 09-03-2010 20:19


Użytkownik
Status: Offline
Dołączył: 24-04-2005
Skąd: Kraków
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 ;]
"Daj komuś rybę, a nakarmisz go na jeden dzień. Naucz go łowić ryby, a nakarmisz go na całe życie."

Ostatnio zmodyfikowany: 09-03-2010 20:27 przez donkey7
Przejdź na górę strony
cytuj
tomtaz ten post 09-03-2010 21:42


Użytkownik
Status: Offline
Dołączył: 08-03-2010

Dziękuję ślicznie za pomoc  ;-P
Przejdź na górę strony
cytuj
szukaj na forum nowy temat odpowiedz

Strona [ 1 ] z 1

1 użytkownik(ów) przegląda ten temat (1 gości)
(żadnych zarejestrowanych użytkowników)

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0680 sek. (zapytań SQL: 9)