Przeszukiwanie tablicy obiektów

0

Witam.W tablicy szukam obiektów o najwyższej i najniższej cenie.Przedstawiam tu kawałek kodu za to odpowiedzialny.Wydaje mi sie dobry, ale w trakciie wykonywania programu powstaje błąd.

double min = tablicaTowarow[0].cenaNetto;                         //przypisujemy zmiennym min,max,liczba
                  double max = tablicaTowarow[0].cenaNetto;                         //wartość pierwszego pola obiektu 0 w tablicy
                  double liczba = tablicaTowarow[0].cenaNetto;;
                       int j = 0;
                       int k = 0;
                       for ( j = 1; j < iloscTowarow; j++){                          //za pomocą instrukcji if...sprawdzamy kolejno
                         if( tablicaTowarow[j].cenaNetto > max )                     //od obiektu 1 czy podana liczba jest mniejsza i
                             max=tablicaTowarow[j].cenaNetto;                        //większa od wcześniejszych pól                          
                            }
                       for ( k = 1; k < iloscTowarow; k++){                          //za pomocą instrukcji if...sprawdzamy kolejno
                         if( tablicaTowarow[k].cenaNetto > max )                     //od obiektu 1 czy podana liczba jest mniejsza i
                             max=tablicaTowarow[k].cenaNetto;                        //większa od wcześniejszych pól
                             }
                         System.out.println("Najtańszy towar to : " + tablicaTowarow[j].nazwa + "[ " + max + " ]" );
                         System.out.println("Najdroższy towar to : " + tablicaTowarow[k].nazwa + "[ " + min + " ]");
0

Skoro powstaje blad, to wcale nie wydaje sie, ze dobry. Odpowiedz na pytanie, jaka wartosc ma zmienna j oraz k po wyjsciu z petli i dlaczego nie mozna ich uzyc w odniesieniu do tablicy (printlajny).

0
  1. Skoro "powstaje blad" to wklej go
  2. Wklejaj kod do znacznikow code=java i niech on bedzie jakos sformatowany, bo tego sie czytac nie da. Takie nagromadzenie komentarzy, tez wydaje sie zbyteczne. Zazwyczajj lepiej napisac czytelny kod, niz jakis kod ktory wymaga komentarza. Najczesciej tylko nieczytelny kod wymaga komentarza.
0
  1. Dokonaj formatowania kodu
  2. Napisz jaki blad
  3. Wskazowka: Po co ci dwie takie same petle i takie same if'y?
0

Pierwszy błąd polega na tym, że dwa razy użyłeś max, zamiast w jednym z nich użyć warunku:
tablicaTowarow[k].cenaNetto < min
Drugi błąd polega na odwróconym użyciu max i min w println().
Trzeci błąd polega na tym, że po zakończonej pętli j oraz k wskazują poza ostatni element tablicy (czyli spowodują błąd dostępu do elementów).
Nawet gdybyś zatrzymał się przed końcem tablicy, to prawie zawsze pojawi się zła nazwa towaru.
Potencjalny czwarty błąd polega na tym, że ilość towarów trzymasz w osobnej zmiennej podczas gdy powinieneś brać ją z tablicy towarów - jeżeli tego nie robisz - i to nie gdzieś blisko pętli, to narażasz się na wyjątek wyjechania poza zakres tablicy.

Poza tym mógłbyś zrobić to w jednej pętli bo przeszukujesz te same dane. Drugą zmianą jaką bym proponował byłaby zmiana typu max i min z double na integer - a to w celu wyszukania indeksu potrzebnych danych, a nie przepychania ich samych. Mając indeksy możesz z wynikami zrobić wszystko. Mając dane musisz ponownie przeszukiwać tablicę w celu jakiegoś porównywania.
Kod mógłby wyglądać tak:

	for(int i = 1, max = 0, min = 0; i < tablicaTowarow.length; ++i)
	{
		double cena = tablicaTowarow[i].cenaNetto;
		if(cena > tablicaTowarow[max].cenaNetto)
			max = i;
		if(cena < tablicaTowarow[min].cenaNetto)
			min = i;
	}
	System.out.println("Najtańszy towar to : " + tablicaTowarow[min].nazwa
		+ "[ " + tablicaTowarow[min].cenaNetto + " ]");
	System.out.println("Najdroższy towar to : " + tablicaTowarow[max].nazwa
		+ "[ " + tablicaTowarow[max].cenaNetto + " ]");

Krótszy i czytelny.

Konkluzja jest taka, że dość trudno znaleźć kod z większą ilością błędów. Nie był on wcale dobry.

0

Mi się nie podoba wyświetlanie nazwy jednego najdroższego towaru. Użytkownik programu, który do badanej tablicy dopisał kilka towarów i zapamiętał, że był wśród nich telefon za 150 zł, będzie zdezorientowany i pomyśli że program działa źle gdy zobaczy komunikat:

Najdroższy towar to: komplet sztućców [150]

0

To trzeba by jeszcze uwzględniać, że może być kilka towarów o tej samej najwyższej lub najniższej cenie. Wtedy chyba jedyne sensowne rozwiązanie, to posortowanie tablicy wg ceny i wyświetlenie kilku towarów z początku i/lub końca.

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