Coś się zepsuło, albo środowisko uruchomieniowe Javy, albo kompilator

0

Posiadam w programie pętle, która powinna działać w 100%, ponieważ wiele razy używałem identycznej.

Kod: http://4programmers.net/Pastebin/5863

Działa to w taki sposób.

Posiadam panel z możliwościami wybory posortowania bazy filmów. Wybieram sobie np, gatunek "horror", i chcę posortować według oceny. Potem ogarniam Listę i wysyłam ją argumentem do metody showRanking(), aby powyświetlać odpowiednio JButton i JLabel. Lista posiada tylko 1 element, ponieważ w bazie posiadam tylko jeden film tego gatunku. Czyli rozmiar Listy wynosi 1. W pętli for ustawiam int i = 1 i warunek i < listSortMovie.size()+1, ponieważ nie zaczynam od 0, tylko od 1, dlatego dodaję do rozmiaru listy 1. W tym przypadku pętla powinna się wykonać tylko raz, a ona niespodziewanie po wykonaniu pętli raz i sprawdzeniu warunku leci kolejny raz, mimo że i = 2 nie jest mniejsze od size(1)+1. W debugerze jasno jest napisane, że rozmiar listy wynosi size:1, a po wykonaniu pętli 'i' wynosi 2.
Czyli i(2) równa się 1(list size) + 1, koniec powinno zostawić pętle, a to idzie kolejny raz i przez to, że lista nie ma więcej elementów zaczyna wywalać wyjątki

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
	at java.util.ArrayList.elementData(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)

Wie ktoś, co można z tym zrobić?
Na chama jak wpisałem

if(i == 2)
				break;

to działało bardzo dobrze.

0
  1. Piszesz gówniany kod. Serio.
  2. Błąd javy albo kompilatora? :D :D :D
} catch(NullPointerException e) {}

Ty sobie żartujesz, prawda? o_O
4. Problem jest pomiedzy krzesłem i monitorem, jak zawsze.
Masz tam jakieś dwie listy. listMovies używasz do ustalenia licznika pętli a innej listy, listSortedMovies to lista z której wybierasz... Zapewne mają różną liczbę elementów.
5.

Wie ktoś, co można z tym zrobić?

Nauczyć się korzystać z debugera.

4

Inni użytkownicy skarżyli się na arogancję pana moderatora, ale o ile ton wypowiedzi może budzić kontrowersje, to treść jak najbardziej ok.

Nie ma bata! To nie problem środowiska ani kompilatora.

I) Warto byś uporządkował kod:
1.

if(i == listMovies.size()+1)
			break; 

ów warunek jest bez sensu, możesz to wyrzucić, ten warunek nigdy nie zajdzie, gdyż masz w pętli for do listMovies.size()+1. (Doczytałam, ze dałeś w akcie desperacji, jak ci źle działało)
2. kod byłby czytelniejszy gdybyś np. wydzielił kod do metod createLabelRank, createButtonPoster itp.
3. Łapanie wyjątku NullPointerException to nie jest dobry pomysł, jeżeli taki wyjątek występuje, to znaczy że twój kod nie działa poprawnie
4. sprawdzasz if (i == 0) a warunek taki NIGDY nie wystąpi, bo i>=1

II) Zapnij się debugerem i zweryfikuj rozmiar listy filmów i posortowanych filmów, bo wydaje się, że tu tkwi problem i obie listy mają inny rozmiar.

Ehh a miałam się odgryźć na tym wyżej i mi nie wyszło :(

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