java - problem s premennymi

Programovacie jazyky, rady, poradňa...
Preetro
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 269
Registrovaný: 16 nov 2005, 19:40
Bydlisko: škatuľka od topánok

java - problem s premennymi

Príspevok od používateľa Preetro »

ahojte, mam takyto problem:
mam triedu Tovar,ktora obsahuje

Kód: Vybrať všetko

private String nazov;
    private String popis;
    private int cena;
    private int mnozstvo=0;

nasledne sa objekt tovar uklada do arrayListu<Tovar>. Ako by sa dala navrhnut trieda tak, ze po zmene nejakeho udaja v triede Tovar by sa uz existujuci objekt tej istej triedy v arrayListe nezmenil?
napr. v arrayListe je tovar:

Kód: Vybrať všetko

nazov="rajcina";
popis="zelenina";
cena=2;
mnozstvo=3
a ked zmenim tento objekt, tak chcem aby v tom arrayListe zostal ten stary objekt a pridal sa donho ten zmeneny

Kód: Vybrať všetko

-----1. objekt-----------
nazov="rajcina";
popis="zelenina";
cena=2;
mnozstvo=3
-----2. objekt-----------
nazov="rajcina";
popis="zelenina";
cena=2;
mnozstvo=5;
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: java - problem s premennymi

Príspevok od používateľa axxis »

vytvor si klon toho povodneho, uloz klon do AL a zmen povodny
pheo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 212
Registrovaný: 20 sep 2005, 16:53
Bydlisko: moje hniezdo
Kontaktovať používateľa:

Re: java - problem s premennymi

Príspevok od používateľa pheo »

Ako vytvoiriť klon tak tu ...

Kód: Vybrať všetko

http://www.java-tips.org/java-se-tips/java.lang/how-to-implement-cloneable-interface.html
Preetro
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 269
Registrovaný: 16 nov 2005, 19:40
Bydlisko: škatuľka od topánok

Re: java - problem s premennymi

Príspevok od používateľa Preetro »

urobit clone mi nepomohlo :( problem stale pretrvava .. potreboval by som po editacii informacii o existujucich tovaroch, aby sa obsah existujucich faktur, ktore obsahuju informacie o fakturovanom tovare, nebude menit ... mam to ako zadanie do skoly, vsetko mam len toto neviem nejako rozbehat :(
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: java - problem s premennymi

Príspevok od používateľa axxis »

problem moze byt v tom, ze si spravil shallow ( plytky? ) klon a potrebujes deep. pri prvej moznosti sa nakopiruju len referencie, takze sa to navonok ksichti ako dva objekty ale v skutocnosti ukazuju na jedno a to iste miesto. Ty potrebujes hlboku kopiu, ta vytvori uplne novy objekt s rovnakymi parametrami.
ked sa nechces srat s klonovanim sprav to ako svina, ze natvrdo vytvoris novy objekt, nakopirujes donho atributy stareho a novy ulozis do databaze, over and out. toto musi fungovat

Kód: Vybrať všetko

public class tovar {
	
	private String nazov;
    private String popis;
    private int cena;
    private int mnozstvo=0;
    
    public tovar(String n, String p, int c, int m)
    {
    	nazov = n;
    	popis = p;
    	cena = c;
    	mnozstvo = m;
    }
    
    
	public void setNazov(String nazov) {
		this.nazov = nazov;
	}
	public String getNazov() {
		return nazov;
	}
	public void setPopis(String popis) {
		this.popis = popis;
	}
	public String getPopis() {
		return popis;
	}
	public void setCena(int cena) {
		this.cena = cena;
	}
	public int getCena() {
		return cena;
	}
	public void setMnozstvo(int mnozstvo) {
		this.mnozstvo = mnozstvo;
	}
	public int getMnozstvo() {
		return mnozstvo;
	}

}

Kód: Vybrať všetko

public class main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		List<tovar> list = new ArrayList<tovar>();
		
		tovar t1 = new tovar("Jablko","",12,15);
		tovar t2 = new tovar("Slon","",50,20);
		tovar t3 = new tovar("Lol","",30,45);
		tovar t4 = new tovar(t1.getNazov(),t1.getPopis(),t1.getMnozstvo(),t1.getCena());
		
		list.add(t1);
		list.add(t2);
		list.add(t3);
		list.add(t4);
		t1.setNazov("Hruska");
		
		for (tovar tv : list) {
			
			System.out.println(tv.getNazov());
			
		}

	}

}
Preetro
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 269
Registrovaný: 16 nov 2005, 19:40
Bydlisko: škatuľka od topánok

Re: java - problem s premennymi

Príspevok od používateľa Preetro »

dik uz to ide nakoniec som to spravil aj cez to clone() .. chyba bola v tom, ze som musel zavolat clone aj na tovar, ale potom aj na zoznam tovaru
Napísať odpoveď