Witam
Tworzę sobie programik do szkoły, taki test sprawdzający wiedzę.
Mam trzy rodzaje pytań, wielokrotnego wyboru, pojedynczego i wprowadzanie do jtextfield.
Można wracać do poprzedniego pytania.
Mam trzy funkcje odpowiedzialne za sprawdzanie odpowiedzi, niemalże identyczne (tak na marginesie jest w javie coś takiego jak szablony funkcji?, na google coś tam znajdywałem ale do c++) Na końcu każdej z tych funkcji mam umieszczony kodzik odpowiedzialny za przekazanie wybranych odpowiedzi do kolekcji przechowującej te odpowiedzi, dzięki temu chcę aby, użytkownik gdy chce wrócić do poprzedniego pytania, jeśli wybrał jakieś odpowiedzi, to będą one np.zaznaczone dzięki tej kolekcji.
private List<String> list_odp = new ArrayList<String>(); //lista przechowująca odpowiedzi do aktualnego pytania, za każdym razem czyszczona.
private Map<Long, List<String>> map_all_odp = new HashMap<Long, List<String>>();//kolekcja //przechowująca wybrane odpowiedzi ze wszystkich pytań na które udzielono odpowiedzi.
Przykładowy kod mający przeprowadzać operację:
private void checkTyp3() {
///kod poprzedzający
list_odp.add(word); //word - przekazana odpowiedz
//System.out.println(pytania[nr_pyt].id_rek);
//System.out.println("listOdp zawiera:"+list_odp);
if (map_all_odp.containsKey(pytania[nr_pyt].id_rek)) {
//System.out.println("Zawartość kolekcji mapAllOdp:"+map_all_odp);
map_all_odp.remove(pytania[nr_pyt].id_rek); //usuwanie starej odpowiedzi
//System.out.println("Zawartość kolekcji mapAllOdp:"+map_all_odp);
map_all_odp.put(pytania[nr_pyt].id_rek, list_odp);
// System.out.println("Zawartość kolekcji mapAllOdp:"+map_all_odp);
} else {
map_all_odp.put(pytania[nr_pyt].id_rek, list_odp);
}
System.out.println("Ostateczna zawartość kolekcji mapAllOdp:"+map_all_odp);
list_odp.clear();
word = null;
}
Może ktoś doświadczony od razu widzi co jest nie tak, ja nie mogę tego przejść.
Otóz nie wiem dlaczego odpowiedzi są zapisywane w tej kolekcji nie tylko pod kluczem <pytania[nr_pyt].id_rek>, który się zmienia przy zmianie pytań, ale także pod każdym wcześniejszym
czyli np:
Odpowiadź na pytanie pierwsze:
Ostateczna zawartość kolekcji mapAllOdp:{1=[1938]}
Wszystko ok, na razie.
Odpowiadź na pytanie drugie:
Ostateczna zawartość kolekcji mapAllOdp:{1=[Jarosław Kaczyński, Donald Tusk, Lech Wałęsa], 2=[Jarosław Kaczyński, Donald Tusk, Lech Wałęsa]}
i zonk przypisało także pod klucz 1, dlaczego?, przecież chyba wyrażnie sprecyzowałem gdzie ma umieścić wartości.
i tak dalej pod wszystkie klucze przypisuje wartość z ostatniego sprawdzonego pytania.
Poratuje ktoś
Pozdrawiam