• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dodawanie obiektów do kolekcji ArrayList

0 głosów
1,735 wizyt
pytanie zadane 14 marca 2018 w Java przez mibdbz Gaduła (4,300 p.)

Wczytuję plik ze Stringami, zamieniam je na odpowiednie typy. Wczytuję do obiektu. Chcę dodać obiekt do ArrayList. Do pewnego momentu w pętli mi to wychodzi. Niestety potem wszystkie obiekty w liście zamieniają się na ostatni odczytany obiekt. Oto kod metody: 

public void loading(String fileName) throws IOException {
                        
                        FileReader file = new FileReader(fileName);
                        Scanner scanner = new Scanner(file);
                        while(scanner.hasNextLine()) {
                        measurement.setDate(scanner.nextLine());
                        measurement.setUpperPressure(Integer.parseInt(scanner.nextLine()));
                        measurement.setLowerPressure(Integer.parseInt(scanner.nextLine()));
                        measurement.setPuls(Integer.parseInt(scanner.nextLine()));
                            System.out.println(measurement.toString());
                        listOfMeasurement.add(measurement);
                            
                        }
                        System.out.println(listOfMeasurement.toString());
                        scanner.close();
                }

A to wczytywany plik:

2018-03-14
111
111
111
2018-03-14
222
222
222
2018-03-14
333
333
333
2018-03-14
0
0
0
2018-03-14
123
123
123
2018-03-14
999
999
999
2018-03-14
456
456
456
2018-03-14
777
777
777
2018-03-14
0
0
0
2018-03-14
123
321
123
2018-03-14
12
12
12

wynikiem po pętli jest tylko ostatnie 4 linie. Więc co zrobić żeby do listy wczytywały się wszystkie obiekty z pliku?

2 odpowiedzi

+1 głos
odpowiedź 14 marca 2018 przez Aisekai Nałogowiec (42,190 p.)
wybrane 14 marca 2018 przez mibdbz
 
Najlepsza
W strukturach danych (tablice, kolekcje itp), czyli np w ArrayList dane są przechowywane jako referencje do obiektów. Czyli tak naprawdę, dodając w pętli While() measurment do listy, za każdym razem dodajesz referencje do tego samego obiektu.

Zmieniając pola measurment z każdą iteracja pętli, zmieniasz pola we wszystkich obiektach w tej liście (bo tak jak już wcześniej wspomniałem, wszystkie referencje wskazują na zmieniany obiekt).

Jak to rozwiązać, to już kolega napisał. Zapisywać nowe obiekty do listy (z każdą iteracja tworzyć i zapisywać nowy obiekt).
komentarz 14 marca 2018 przez mibdbz Gaduła (4,300 p.)
Bardzo dziękuję za odpowiedzi. Oczywiście pomogło. Zapamiętam na pewno na długo.
+1 głos
odpowiedź 14 marca 2018 przez Mateusz51 Nałogowiec (28,180 p.)
Obiekt mesurment jest cały czas nadpisywany nowymi danymi. W pętli powinieneś za każdym razem tworzyć nowy obiekt

Podobne pytania

+1 głos
1 odpowiedź 959 wizyt
0 głosów
1 odpowiedź 485 wizyt
pytanie zadane 24 marca 2021 w Java przez niezalogowany
0 głosów
2 odpowiedzi 372 wizyt
pytanie zadane 27 lutego 2021 w Java przez napoludniestad.pl Użytkownik (960 p.)

93,743 zapytań

142,682 odpowiedzi

323,299 komentarzy

63,330 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...