Przekazywanie ArrayListy

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..

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;
	}
	

}

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ś?

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.

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..

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

0

Przy takim zapisie wywala mi java.lang.NullPointerException

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

	}

0

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

class Box {
 ...
 List<Flower> kwiaty = new ArrayList<Flower>();
...
0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1