Arraylist - wszystkie rekordy takie same

2010-12-15 10:43
totson
0

Prosta sprawa. Jest sobie klasa:

class studenciak {
        String nazwisko;
        String imie;
        String ocena;
    }

Jest sobie funkcja która wczytuje z pliku linijka po linijce tekst do obiektu klasy studenciak, a obiekty te do Listy obiektów tej klasy (Arraylist)

static List<studenciak> pobierz(List<studenciak> std)
       throws IOException
    {
       FileReader fr = new FileReader("studenci.txt");
        BufferedReader br = new BufferedReader(fr);
    String linia;
        String tmp[] = new String[3];

       studenciak st = new studenciak();
       while((linia = br.readLine()) != null)
        {
          tmp=linia.split(" ");
          st.nazwisko = tmp[0];
          st.imie = tmp[1];
          st.ocena = tmp[2];
          std.add(st);
        }
  return std;
     }

Problem polega na tym, że po wyjściu z pętli while wszystkie obiekty w liście są takie same. Dokładnie są równe ostatniemu dodanemu obiektowi.
Wyświetlając zawartość listy jeszcze w pętli (dodaje sobie dodatkowy licznik- int licz,) to wszystko jest ok.


  System.out.print(std.get(licz).nazwisko+" ");
  System.out.print(std.get(licz).imie+" ");
  System.out.print(std.get(licz).ocena+" ");

Wyświetlając zawartość listy za pętlą juz jest kaszanka i wszystkie rekordy sa takie same == ostatniej wprowadzonej pozycji
Sprawdziłem to wyświetlając elementy ze sztywno przypisanym indeksem.

System.out.print(std.get(0).nazwisko+" ");
       System.out.print(std.get(1).nazwisko+" ");
       System.out.print(std.get(2).nazwisko+" ");

I nie mam już pomysłu co może być nie tak.

Pozostało 580 znaków

2010-12-15 10:53
bo
0

Wstawiasz ciągle te samą referencję

       studenciak st;
       while((linia = br.readLine()) != null)
       {
          st=new studenciak()
          tmp=linia.split(" ");
          st.nazwisko = tmp[0];
          st.imie = tmp[1];
          st.ocena = tmp[2];
          std.add(st);
        }

Pozostało 580 znaków

2010-12-15 10:58
totson
0

Heh, taka pierdoła.
Dzięki.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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