• 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
421 wizyt
pytanie zadane 14 marca 2018 w Java przez mibdbz Bywalec (2,060 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 (37,180 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 Bywalec (2,060 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,200 p.)
Obiekt mesurment jest cały czas nadpisywany nowymi danymi. W pętli powinieneś za każdym razem tworzyć nowy obiekt

Podobne pytania

0 głosów
1 odpowiedź 79 wizyt
pytanie zadane 11 grudnia 2018 w Java przez tiesto.ulic Obywatel (1,010 p.)
0 głosów
2 odpowiedzi 77 wizyt
pytanie zadane 26 października 2018 w Java przez Potopiec Obywatel (1,530 p.)
0 głosów
5 odpowiedzi 514 wizyt
pytanie zadane 24 stycznia 2018 w Java przez Piotr Kusnierkiewicz Użytkownik (670 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

67,129 zapytań

114,075 odpowiedzi

241,789 komentarzy

47,030 pasjonatów

Przeglądających: 207
Pasjonatów: 13 Gości: 194

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...