Przekazywanie ArrayListy

Przekazywanie ArrayListy
UL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

Witam, chce przekazać Arrayliste z Obietku1 do Obiektu 2, po czym wyczyścić listę Obiektu1, lecz jak wyczyszczę to czyszczą mi się wszystkie listy..

Kopiuj
package zad1;

import java.util.ArrayList;

public class Customer {

	private int cash;
	 String imie;
	 ArrayList<Flower> flowers = new ArrayList<Flower>();
	 ShoppingCart sc;
	 

	public Customer(String string, int i) {
		this.imie = string;
		this.cash = i;
	}

	public void pay() {
		double naleznosc = 0;
		for(Flower r : sc.getList()){
			if(r.cena!= -1.0){
			naleznosc = r.cena*r.ilosc;
			}else{
				sc.getList().remove(r);
			}
		}
		if(naleznosc>cash){
			
		}else{
			cash -= naleznosc;
		}
	}

	public void get(Flower rose) {
		flowers.add(rose);

	}

	public ShoppingCart getShoppingCart() {
		 sc = new ShoppingCart(flowers, imie);
		 this.flowers.clear();
		return sc;
	}

	public void pack(Box pudelkoJanka) {
		pudelkoJanka.kwiaty=sc.getList();	

	}

	public double getCash() {
		
		return cash;
	}
	

}

Kopiuj
package zad1;

import java.util.ArrayList;

public class ShoppingCart {

	private ArrayList<Flower> flowers;
	String imie = "";

	public ShoppingCart(ArrayList<Flower> flowers2, String imie) {
		this.flowers = flowers2;
		this.imie = imie;
	}

	public String toString() {                                                     
		String str ="Wózek własciciel " + imie + "\n";
		for (Flower r : flowers) {
			str += r.typ + ", kolor: " + r.kolor + ", sztuk: " + r.ilosc + ", cena: " + r.cena + "\n";
			
		}
		return str;

	}
	
	public ArrayList<Flower> getList(){
		return flowers;
	}
}

próbowałem dawać lista1 = lista2; oraz na pętli for-each ale zawsze wynik ten sam. Pomoże ktoś?

DE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1788
0

Zrób kopię tej twojej listy. Pamiętaj tylko, że jak sklonujesz listę, to nie klonujesz jej zawartości. Tzn. czyszcząc jedną nie wyczyścisz drugiej, ale już modyfikując obiekt listy A, zmodyfikujesz też obiekt listy B.

UL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

Kopie w sensie? jak dam w drugim obiekcie liste i przez for-eacha bede dodawał elementy z pierwszej to nie działa, znaczy dodarzą się, ale potem robie obiekt1.lista.clear() i obie są puste..

RI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 86
S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3573
0

Uwaga, dzieję się tak ponieważ jak przekazujesz ta liste to nie przekazujesz tak naprawde listy tylko referencję do niej, czyli de facto adres w pamieci. Tak więc współdzielona referencja == dostęp do tego samego obiektu

UL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

Przy takim zapisie wywala mi java.lang.NullPointerException

Kopiuj
public void pack(Box pudelkoJanka) {
		for(Flower r : sc.getList()){
			pudelkoJanka.kwiaty.add(r);
		}

	}

jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4712
0

Niestety nie wiem co to jest Box . pudelkoJanka. Nie wleiłeś tego kodu.
Ale może nie inicjalizujesz tam listy kwiaty.

Kopiuj
class Box {
 ...
 List<Flower> kwiaty = new ArrayList<Flower>();
...
UL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

Już po ptakach, zmieniłem list na tablice i działa, więc tego nie ruszam. Ale inicjowałem liste.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.