pamparampa Opublikowano 13 Stycznia 2013 Udostępnij Opublikowano 13 Stycznia 2013 Witam. Mam następujący problem: Mam program, w którym można zarządzać firmą, np. dodawać pracowników, liczyć ich wypłatę itd. Wszyscy pracownicy są zapisaniu w kolekcji hashset. Przedstawiam początek głównej klasy i dwie metody: import java.util.*; public class Test { public Set set = new HashSet(); public Urzednik urzednik; public Robotnik robotnik; private int r; private int i; public <Pracownik>Iterator it = set.iterator(); public Pracownik znajdz(String nazwisko) { Pracownik p = null; while(it.hasNext() && !it.next().nazw.equals(nazwisko) ) { } if(it.hasNext()) { p=it.next(); } return p; } public boolean przyjmijRobotnika(String nazwisko,double etat,int godzin) { robotnik = new Robotnik(nazwisko,etat,godzin); if(znajdz(nazwisko)==null) { set.add(robotnik); return true; } else { return false; } } } I próbuję dodać nowego pracownika, zwraca mi true, a potem korzystam z metody 'znajdź' i okazuje się, że zwraca mi null, czyli tak jakby tego pracownika nie było. Dodam jeszcze, że przy kompilowaniu wyskakuje mi takie okienko :"<ścieżka do klasy Test> uses unchecked or unsafe operations. Recompile with -Xlint:unchecked for details". Nie wiem czy to ma jakikolwiek związek z problemem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 13 Stycznia 2013 Udostępnij Opublikowano 13 Stycznia 2013 Znajome klasy, czyżby PWr? A błąd masz w wyszukiwaniu, bo w pętli while it.nextem pobierasz pracownika do jej warunku i gdy trafi na dobrego to przerywa pętle, a w ifie pobierasz już następnego pracownika, zamiast tego prawidłowego. Musisz po prostu w warunku pętli dać samo hasNext, a w niej dopiero dać ifa sprawdzającego nazwisko (przy czym pobierz pracownika do jakiejś zmiennej pomocniczej, a dopiero potem sprawdzaj ifem, czy to jest ten prawdiłowy). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 14 Stycznia 2013 Administratorzy Udostępnij Opublikowano 14 Stycznia 2013 A nie lepiej: for (Iterator<Pracownik> i = it.iterator(); i.hasNext(); ) { if (i.nazw.equals(nazwisko)) { return i; } } return null; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 14 Stycznia 2013 Udostępnij Opublikowano 14 Stycznia 2013 Równie dobrze można użyć foreacha, bo skoro tylko odczytujemy elementy, to jest to najprostsza konstrukcja: for (Pracownik i: set) { if (i.nazw.equals(nazwisko)) return i; } return null; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się