Dzień dobry,
mam mały problem przy programie. Mam ArrayListę oryginalną i jej kopię. Do pewnej metody przenoszona jest ta oryginalna tam jest kopiowana przy użyciu (ArrayList<int> list = (ArrayList<int>) l.clone();) następnie przetwarzam kopiowaną tablicę w innej metodzie, zmieniam jej zawartość (set(i, j)) lub usuwam jakieś jej elementy. Problemem jest to, że zmienia mi się oryginalna tablica (jej wartości) choć żadna wartość nie jest usunięta. W kopiowanej tablicy są zmieniane wartości a niektóre elementy są usunięte. Jestem początkująca w tych tematach i nie wiem co może być tego przyczyną. Proszę o pomoc
0
1
Object.clone() jest zwykle płytką kopią, więc np w przypadku kolekcji przetrzymywane referencje pozostają bez zmian. Pokaż kod.
0
Kod jest dosyć duży i zagmatwany więc wiem że nikt by go nie chciał oglądać... :c ```java
public int count(ArrayList<int[]> l) {
counter = 0;
if (Board.isEmpty())
counter = (size*size-1)/2;
else {
ArrayList<int[]> list = (ArrayList<int[]>) l.clone();
int[] tmp = Move.findMinMove(list);
//findMinMove ogólnie wyszukuje jakieś konkretne 2 pkt z list i zawiera indeksy z tablicy
while(tmp != null) {
setPoint(tmp[0], list);
//w setPoint najpierw aktualizuję pkt które znajdują się obok tego podanego (w jeszcze innej metodzie) a potem go usuwa z tablicy już w setPoint
setPoint(tmp[1], list);
counter++;
tmp = Move.findMinMove(list);
}
}
return counter;
}
0
ArrayList<int[]> list = (ArrayList<int[]>) l.clone();
Ten kod robi płytką kopię. Tablice w nowej ArrayLiście będą tymi samymi tablicami co te w starej. Musisz więc odpalać .clone() na tablicach, a nie na samej ArrayLiście. Stwórz nową ArrayListę i wstaw w nią sklonowane tablice.
0
Dziękuje poprawiłam błąd i wszystko dobrze działa :)