Witam,
Pisze do was z prośbą o pomoc, gdyż pojawił się u mnie problem, którego według mnie w ogóle nie powinno być.
Cały temat projektu raczej nie ma znaczenia, ale w jednej jego części pobieram z pliku txt dane, plik wygląda tak:
"osobowy Volvo 2012 5L/100km
ciezarowy Mercedes 2018 6L/100km
F1 Ferrari 2019 10L/100km
dostawczy Mercedes 2017 5L/100km
F1 Porsche 2019 10L/100km"
Napisałem kod, który według mnie powinien przypisywać z kolejnych linii dane o samochodach do HashMap<String,ArrayList<Dana>> (Klucz to po prostu pierwsza dana o samochodzie np. "osobowy", a "Dana" to po prostu te wszystkie dane o samochodzie) . W warunku if(linia nr 16)sprawdzam czy nie ma już takiego klucza w HashMap'ie i jeśli nie ma to dodaje do niej dane, a jeśli już jest(powtarzają się "F1") to nadpisuje ArrayList'ę przypisaną do tego klucza kolejnymi danymi i tutaj powstaje problem, gdyż w linii nr 19 przypisując do innej ArrayList'y(dana2) ArrayListę z pierwszą linią o danym rodzaju samochodu(ArrayList<Dana> dana2 = samochody.get(rodzaj);) okazuje że przypisuję linię kolejną z rodzaju "F1" czyli Porsche, a nie Ferrari tak jak powinno być, a przecież nigdzie jeszcze tej linii do HashMap'y nie wrzuciłem.
HashMap<String,ArrayList<Dana>> samochody = new HashMap<>();
ArrayList<Dana> ostateczne = new ArrayList<Dana>();
try (BufferedReader br = new BufferedReader(new FileReader("Cars.txt"))) {
String line;
while ((line = br.readLine()) != null) {
String[] info = line.split(" ");
String rodzaj = info[0];
String marka = info[1];
String rokProdukcji = info[2];
String zużyciePaliwa = info[3];
ostateczne.add(new Dana(rodzaj, marka, rokProdukcji, zużyciePaliwa));
if(samochody.containsKey(rodzaj)==false) {
samochody.put(rodzaj ,ostateczne);
}else if(samochody.containsKey(rodzaj)==true){
ArrayList<Dana> dana2 = samochody.get(rodzaj);
dana2.add(ostateczne.get(0));
samochody.replace(rodzaj, dana2);
dana2.clear();
}
ostateczne.clear();
}
} catch (Exception exc) {
exc.printStackTrace();
System.exit(1);
}