Problem z kolekcją

0

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

0

za bardzo sie nie wczytywalem w kod ale..czy remove nie powoduje powrotu do poprzedniego klucza?

0

Z tego co ja zrozumiałem z dokumentacji remove usuwa wartość znajdującą się pod tym kluczem(?), kiedy wykomentuje to remove efekt działania funkcji pozostaje taki sam, wyrzuciłem ten kod do osobnych funkcji ale efekt pozostaje bez zmian. Dodam jeszcze że jak zmienie typ kolekcji list_odp na inny to też wynik działanie funkcji nie zmienia się:/

Problem został rozwiązany, jakby kogoś interesowało wystarczyło utworzyć w metodzie nowy obiekt array_list, wstawić do niego dane z tymczasowego list_odp i wrzucic do mapy, eh takie proste...i okazało się kompletnie bez użyteczne.

Pozdrawiam

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