Portál AbcLinuxu, 12. května 2025 09:05
zaznamySkupiny
nacpat ty stejné instance, jako do pole zaznamy
. Tzn. tvůj problém spočívá v rozdílu "stejné objeky" vs. "objekty nesoucí stejná data".
... Skupina s1 = new Skupina; Skupina s2 = new Skupina; Zaznam z1 = new Zaznam; s1.add(z1); s2.add(z1); ...ale jak to provést když jsou záznamy v poli to přesně nevím. jinak jsem to zatím vyřešil trochu jinak. Program přidává záznamy pouze vybrané skupině. To by snad mohlo stačit pro dané zadání. Nicméně pokud se povede i ten původní záměr budu rád. zatím dík
List<Zaznam> poleZaznamu1 = new ArrayList<Zaznam>(); List<Zaznam> poleZaznamu2 = new ArrayList<Zaznam>(); Zaznam z1 = new Zaznam; poleZaznamu1.add(z1); poleZaznamu2.add(z1); // Případně toto: Skupina s1 = new Skupina; Skupina s2 = new Skupina; Zaznam z1 = new Zaznam; s1.zaznamySkupiny.add(z1); s2.zaznamySkupiny.add(z1); // Nebo toto: Skupina s1 = new Skupina; Skupina s2 = new Skupina; Zaznam z1 = new Zaznam; s1.zaznamySkupiny.add(z1); s2.zaznamySkupiny.add(s1.zaznamySkupiny.get(0)); // předpokládáme, že z1 je prvním prvkem v s1.zaznamySkupiny
Konkrétně, mám třídu Zaznam, která obsahuje atributy jako jméno, příjmení a tak.
class Zaznam { String meno; String prijmeni; } z1=new Zaznam(); z2=new Zaznam();
Instance této třídy jsou pak ukládány do pole,
ArrayList<Zaznam> poleZaznamov=new ArrayList<Zaznam>(); poleZaznamov.add(z1); poleZaznamov.add(z2); z2.meno="fero";
které je následně uloženo o souboru.
new ObjectOutputStream(new FileOutputStream("subor.dat")).write(poleZaznamov);
Pak je tu třída Skupina, která má atributy název (String) a zaznamySkupiny (arraylist typu zaznam).
class Skupina { String nazev; ArrayList<Zaznam> zaznamySkupiny; } Skupina s=new Skupina(); s.zaznamySkupiny=new ArrayList<Zaznam>();
Atribut záznamySkupiny má za udržovbat reference na vybrané instance třídy Zaznam. ... když změním údaje v zaznamech, neprojeví se tyto změny v tomto seznamu objektu Skupina a naopak.
System.out.println(poleZaznamov.get(1)); // vypíše "fero", lebo poleZaznamov.get(1) vrati objekt z2. s.zaznamySkupiny.add(z2); s.zaznamySkupiny.get(0).meno="pepa"; // modifikuje objekt z2 System.out.println(poleZaznamov.get(1)); // vypíše "pepa"Ďalej sa nejak strácam. Nie je mi jasné, kde je problém. Asi v tom, že vyrábaš nový objekt, miesto toho, aby si ten istý objekt pridal do jedného aj druhého zoznamu. Ak stále nevieš čo s tým, tak sem attachni nejaký kód nech vieme, o čom sa bavíme.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.