Zuweisung von gesicherten Werten funktioniert nicht

JRookie

Aktives Mitglied
Guten Abend zusammen,
ich möchte einen array von Objekten in einem "Sicherungsobjekt" speichern und dann wieder zurückholen ... und das funktioniert nicht.
Ganz einfach:
Code:
public class Autos {

	public static void main(String[] args) {
	
	kfz[] a1				= new kfz [3] ;	
	kfz[] a2				= new kfz [3] ;	
	Werkstatt [] spst		= new Werkstatt [99] ;

     	a1[0] = new kfz() ;
		a1[0].setName("Audi");
		a1[0].setAnz_raeder(4);	
		
	    a1[1] = new kfz() ;
		a1[1].setName("VW");
		a1[1].setAnz_raeder(5);	


		for (int i = 0; i<2;i++)  {
			System.out.println("Hier Autos: " + a1[i].getName() + "   Raeder: " + a1[i].getAnz_raeder() ); 

		}
		
		spst[0]	= new Werkstatt() ;	// der Versuch, alles in Werkstatt zu sichern
		spst[0].setUps(a1);
		
		a1[0].setName("XXX");		// ändere die bisherigen Werte
		a1[0].setAnz_raeder(14);	
		
	     a1[1] = new kfz() ;
		a1[1].setName("YYY");
		a1[1].setAnz_raeder(15);	
		
		a2	= spst[0].getUps();		// der Versuch, die alten Werte aus Werkstatt zurückzuholen
		
		for (int i = 0; i<2;i++)  {
			System.out.println("Hier Autos: " + a2[i].getName() + "   Raeder: " + a2[i].getAnz_raeder() ); 

		}
	}
}
die Klasse kfz:
Code:
public class kfz {
	private String name;
	private int	anz_raeder;


	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAnz_raeder() {
		return anz_raeder;
	}

	public void setAnz_raeder(int anz_raeder) {
		this.anz_raeder = anz_raeder;
	}

}
und die "Sicherungsklasse:
Code:
public class Werkstatt {
	 kfz[] ups	= new kfz [3] ;	
	 
	    public Werkstatt()
	    {

	    }

		public kfz[] getUps() {
			return ups;
		}

		public void setUps(kfz[] ups) {
			this.ups = ups;
		}
}
Als output gibt es dieses:
Code:
Hier Autos: Audi   Raeder: 4
Hier Autos: VW   Raeder: 5
Hier Autos: XXX   Raeder: 14
Hier Autos: YYY   Raeder: 15
Warum kann ich die "alten" Werte nicht wieder aus dem grade erzeugten Objekt spst[0] wieder rauszaubern ?? Echt simpel eigentlich ... aber geht nicht.
Weiß jemand warum ?? Und wie geht's ??
Danke im voraus
JRookie
 
G

Gast2

Gast
Du setzt nur Referenzen. ups in Werkstatt und a1 zeigen auf der selbe Array. Änderst du am Array was über die Referenz a1, dann sind die Änderungen auch bei ups vorhanden.
Wenn du da was "sicher" willst dann musst du ne Kopie erzeugen.
 

JRookie

Aktives Mitglied
Ich denk mal, du hast recht, weil das Fehlerbild so erklärbar ist.
Aber verstehen tu ich es nicht: ich erzeuge zwei kfz Objekte in der main Klasse (a1 und a2) und ein kfz Objekt in der Werkstatt Klasse (ups). Eigentlich haben die doch nix miteinander zu tun ... so wie 3 int Werte verteilt auf 2 Klassen.
Wodurch kommt die Verbindung von a1 und ups zustande ????
 
G

Gast2

Gast
In der Klasse Werkstatt erstellst du nur ein Array, dass 3 kfz Objekte halten kann.
Die kfz Objekte (2 Stück) erstellst du in der Klasse Autos. Am ende deines Programms zeigen a1, a2 und ups alle auf die SELBEN beiden kfz Objekte.
 

JRookie

Aktives Mitglied
Und so gehts auch nicht : Hab jetzt mal a2 als "Aufbewahrungsort" genommen:
Code:
public class Autos {

	public static void main(String[] args) {
	
	kfz[] a1				= new kfz [3] ;	
	kfz[] a2				= new kfz [3] ;	
	Werkstatt [] spst		= new Werkstatt [99] ;

     	a1[0] = new kfz() ;
		a1[0].setName("Audi");
		a1[0].setAnz_raeder(4);	
		
	    a1[1] = new kfz() ;
		a1[1].setName("VW");
		a1[1].setAnz_raeder(5);	


		for (int i = 0; i<2;i++)  {
			System.out.println("Hier Autos: " + a1[i].getName() + "   Raeder: " + a1[i].getAnz_raeder() ); 

		}
		
		spst[0]	= new Werkstatt() ;	// der Versuch, alles in Werkstatt zu sichern

		spst[0].setUps(a1);
		a2	= a1 ;
		a1[0].setName("XXX");		// ändere die bisherigen Werte
		a1[0].setAnz_raeder(14);	
		
	     a1[1] = new kfz() ;
		a1[1].setName("YYY");
		a1[1].setAnz_raeder(15);	
		
	//	a2	= spst[0].getUps();		// der Versuch, die alten Werte aus Werkstatt zurückzuholen
		
		for (int i = 0; i<2;i++)  {
			System.out.println("Hier Autos: " + a1[i].getName() + "   Raeder: " + a1[i].getAnz_raeder() ); 

		}
		
		a1	= a2 ;
		for (int i = 0; i<2;i++)  {
			System.out.println("Hier Autos: " + a1[i].getName() + "   Raeder: " + a1[i].getAnz_raeder() ); 

		}
	}
}
liefert als Output:
Code:
Hier Autos: Audi   Raeder: 4
Hier Autos: VW   Raeder: 5
Hier Autos: XXX   Raeder: 14
Hier Autos: YYY   Raeder: 15
Hier Autos: XXX   Raeder: 14
Hier Autos: YYY   Raeder: 15
Wie schaffe ich dann 2 kfz Objekte, die voneinander unabhängig sind ??
 
G

Gast2

Gast
Wenn du unterschiedliche Objekte haben willst, dann darfst du nicht die SELBEN nehmen.
a1 und a2 sind bei dir ein und das selbe Objekt. Änderungen bei a1 siehst du auch an a2.

Wie oben schon geschrieben musst du eine Kopie erzeugen.
 
I

irgendjemand

Gast
Da ist nichts unabhängig von einander.
Was du machst ist lediglich noch mehr Referenz auf EIN UND DASSELBE Objekt zu erzeugen ... anstatt neue eigenständige Objekte zu erzeugen.

Wenn du also z.B. ein Array in einem "Sicherungsobjekt" "sichern" willst musst du vom INHALT des Arrays eine Kopie erzeugen und diese Kopie *viel mehr : die neue Referenz auf dieses neue Kopie-Objekt* speichern ... und nicht einfach eine weitere Referenz auf das original-Objekt verwenden.
 

JRookie

Aktives Mitglied
Tja, also irgendwie sollte es dann mit " .... implements Cloneable " und dann " a2 = (kfz)a1.clone(); " gehen. Das klappt noch nicht so ganz ...
Ich hab aber hier noch eine Möglichkeit entdeckt, das entspricht evt. dem was "irgendjemand" schreibt, um den Inhalt zu kopieren:
Code:
public class Autos   {

	public static void main(String[] args) {
	
	kfz[] a1				= new kfz [3] ;	
	kfz[] a2				= new kfz [3] ;	
	Werkstatt [] spst		        = new Werkstatt [99] ;

     	a1[0] = new kfz() ;
	a1[0].setName("Audi");
	a1[0].setAnz_raeder(4);	
		
        a1[1] = new kfz() ;
	a1[1].setName("VW");
	a1[1].setAnz_raeder(5);	


	for (int i = 0; i<2;i++)  {
		System.out.println("Hier Autos: " + a1[i].getName() + "   Raeder: " + a1[i].getAnz_raeder() ); 

	}
		
		
	for (int i = 0; i<2;i++)  {			// so gehts
	    a2[i]		= (kfz) a1[i];
	}
	
        a1[0] = new kfz() ;
	a1[0].setName("XXX");		// ändere die bisherigen Werte
	a1[0].setAnz_raeder(14);	
		
	a1[1] = new kfz() ;
        a1[1].setName("YYY");
	a1[1].setAnz_raeder(15);	
		
	for (int i = 0; i<2;i++)  {
		System.out.println("Hier Autos: " + a1[i].getName() + "   Raeder: " + a1[i].getAnz_raeder() ); 

	}
		

	for (int i = 0; i<2;i++)  {
		System.out.println("Hier Autos: " + a2[i].getName() + "   Raeder: " + a2[i].getAnz_raeder() ); 

	}
   }
}
Aber was mach ich da ?
Code:
a2[i]		= (kfz) a1[i];
Ich kopiere die einzelnen array Elemente? Der Output sieht so aus:
Code:
Hier Autos: Audi   Raeder: 4
Hier Autos: VW   Raeder: 5
Hier Autos: XXX   Raeder: 14
Hier Autos: YYY   Raeder: 15
Hier Autos: Audi   Raeder: 4
Hier Autos: VW   Raeder: 5
 

JRookie

Aktives Mitglied
Aha, Variablen gibts nur bei elementaren Datentypen (int, double,char etc.). Bei Objekten gibt es nur Objektreferenzvariablen, die die Adresse des Objektes enthalten.
zu Cloneable:
Code:
public class Autos  implements Cloneable {
.......
.......
		a2		= (kfz[]) a1.clone() ;
So gehts !
Danke an alle! Ich mach hier mal zu.
JRookie
 
G

Gast2

Gast
Verwende statt dem Cloneable lieber nen Copy-Konstruktor oder ne Copy-Factory.
Und ich meine auch, dass clone keine deep copy erzeugt, die Referenzen sollten also nach dem Klon immernoch aus die selben kfz Objekte zeigen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Zuweisung und Rechenoperationen Java Basics - Anfänger-Themen 15
Henri Anpassung ein Schleife(Zuweisung eines Ordners) Java Basics - Anfänger-Themen 0
Henri Anpassung ein Schleife(Zuweisung eines Ordners) Java Basics - Anfänger-Themen 27
P Array, forSchleife, Zuweisung Java Basics - Anfänger-Themen 24
O this als Zuweisung Java Basics - Anfänger-Themen 5
B Postinkrement Zuweisung Java Basics - Anfänger-Themen 1
G Wie kann man den Erfolg einer Zuweisung als Boolean Wert verwenden? Java Basics - Anfänger-Themen 12
E Best Practice Exaktes Rechnen mit (Pseudo-)Rationalen/Realen Zahlen. Operations Zuweisung für (eigene) Klassen Java Basics - Anfänger-Themen 3
O ExecutorService: ThreadGroup zuweisung? Java Basics - Anfänger-Themen 2
V Arrays aus eigener Klasse erstellt, zuweisung aber spuckt Fehler in verbindung mit main Methode aus. Java Basics - Anfänger-Themen 3
J Zuweisung/Tabelle Java Basics - Anfänger-Themen 6
G OutOfBoundsException bei Array-Zuweisung Java Basics - Anfänger-Themen 2
P Erste Schritte Koordinaten Zuweisung Java Basics - Anfänger-Themen 6
Luk10 Frage zu Zuweisung Java Basics - Anfänger-Themen 7
J Erste Schritte Anfängerproblem Stringkonvertierung und Zuweisung Java Basics - Anfänger-Themen 2
3 Verschachtelte Zuweisung Java Basics - Anfänger-Themen 4
C Array zuweisung Java Basics - Anfänger-Themen 4
D Array-Zuweisung Java Basics - Anfänger-Themen 4
H variablen zuweisung Java Basics - Anfänger-Themen 4
T OOP StringTokenizer, Zuweisung der einzelnen Attribute Java Basics - Anfänger-Themen 21
B Fragen zur Initialisierung/Zuweisung der Variable + Packages erstellen Java Basics - Anfänger-Themen 4
F int zuweisung überprüfen Java Basics - Anfänger-Themen 3
hdi Verständnisfrage zu Zuweisung + Post-Inkrement Java Basics - Anfänger-Themen 3
A kurze frage zu arrays und deren zuweisung Java Basics - Anfänger-Themen 11
G Wieso ist eine String-Übergabe keine by-reference-Zuweisung? Java Basics - Anfänger-Themen 7
Z zuweisung this. Java Basics - Anfänger-Themen 12
S Zuweisung mit Operation "^=" Java Basics - Anfänger-Themen 2
M IntegerVariable und Zuweisung von Zahlen die mit 0 anfangen! Java Basics - Anfänger-Themen 3
H Variable zuweisung in einem If-Statement Java Basics - Anfänger-Themen 3
F Abfrage in Zuweisung mit Fragezeichen Java Basics - Anfänger-Themen 5
Z Zugriff auf Attribute nach Zuweisung einer Referenz Java Basics - Anfänger-Themen 8
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
T PDF-Formula (XFDF) via Mail - Betreff mit Werten aus PDF-Formular ergänzen Java Basics - Anfänger-Themen 2
A Werten aus dem Text ausliesten Java Basics - Anfänger-Themen 6
Csircc Neuer Array mit geringerer Länge und selben werten. Java Basics - Anfänger-Themen 2
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19
C Methode Grouping mit Werten ausgeben Java Basics - Anfänger-Themen 2
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
Henri Vergabe von undeklarieten Werten Java Basics - Anfänger-Themen 64
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
E OOP Array anlegen mit unterschiedlichen Werten Java Basics - Anfänger-Themen 8
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
M Speichern von Werten in Array Java Basics - Anfänger-Themen 1
P Input/Output Bestimmte Anzahl von Werten in einem Array an Methode übergeben Java Basics - Anfänger-Themen 2
M Übergabe von Werten Java Basics - Anfänger-Themen 10
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
M Java Arrays mit Werten initialisieren Java Basics - Anfänger-Themen 3
G Interpolation von Werten im 3D-Raum Java Basics - Anfänger-Themen 3
N Zählen von Rationalen Werten eines Arrays Java Basics - Anfänger-Themen 10
R Objekt erstellen - Attribute mit mehreren Werten Java Basics - Anfänger-Themen 1
F JButton [] mit Werten hinterlegen Java Basics - Anfänger-Themen 10
L Frage zur Rückgabe von Werten bei Methoden Java Basics - Anfänger-Themen 4
L Array mit Werten belegen Java Basics - Anfänger-Themen 7
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
J JFrame ausgabe von Werten Java Basics - Anfänger-Themen 9
F Array mit Scanner-Werten Java Basics - Anfänger-Themen 4
W Klassen [GELÖST] Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren Java Basics - Anfänger-Themen 2
J ArrayList<int[]> wird beim hinzufügen von werten komplett überschrieben warum? Java Basics - Anfänger-Themen 1
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
C Arrays zusammenfügen mit abwechselnden Werten Java Basics - Anfänger-Themen 3
F Map nach Werten durchsuchen Java Basics - Anfänger-Themen 3
S Suche richtigen Typ für Variabel mit den Werten (neu, gebraucht, beschädigt) Java Basics - Anfänger-Themen 7
V Methoden Matrix als 1D Array mit Werten füllen Java Basics - Anfänger-Themen 12
T Liste mit 2 Werten pro Eintrag Java Basics - Anfänger-Themen 9
F Effizientes Lesen von 65 Datein mit Boolean Werten Java Basics - Anfänger-Themen 6
A OOP Buchstaben mit ASCII Werten darstellen Java Basics - Anfänger-Themen 1
M Ausgeben eines 2D Arrays mit int UND String werten - BLUEJ! Java Basics - Anfänger-Themen 4
V Anzahl von gleichen Werten in einem Int-Array ermitteln Java Basics - Anfänger-Themen 4
M Mit Werten aus Arrays in anderen Methoden rechnen? Java Basics - Anfänger-Themen 3
D Sortieren von int Werten von Objekten in einer LinkedList, kann nicht auf int Werte zugreifen Java Basics - Anfänger-Themen 3
L Array - Nach 2 gleichen Werten stoppen Java Basics - Anfänger-Themen 5
N mit Werten aus einer mysql datenbank in java rechnen Java Basics - Anfänger-Themen 17
X Methoden Vertauschen von 2 Werten eines Arrays Java Basics - Anfänger-Themen 13
J Subtraktion von double Werten Java Basics - Anfänger-Themen 3
P Objekt mit Werten aus Array füllen Java Basics - Anfänger-Themen 10
P Vererbung Auslesen von Werten einer ArrayList Java Basics - Anfänger-Themen 30
S Erfahrungswerte von schnelles durchlaufen von Listen mit 2 Werten Java Basics - Anfänger-Themen 10
T Externes Programm mit Werten versorgen Java Basics - Anfänger-Themen 4
T Ausgabe von Werten des Typs double Java Basics - Anfänger-Themen 8
P Methoden Übergabe von Werten Java Basics - Anfänger-Themen 7
D Regex mit Werten aus txt Datei Java Basics - Anfänger-Themen 2
C Mit if Überprüfung von drei Werten durchführen Java Basics - Anfänger-Themen 6
C Comparator mit Double Werten? Java Basics - Anfänger-Themen 12
J Datentypen Fehler bei Berechnung mit Double und Int-Werten Java Basics - Anfänger-Themen 22
T Hashmap mit mehreren Werten Java Basics - Anfänger-Themen 9
B Zweidimensionales Array mit boolean Werten Java Basics - Anfänger-Themen 3
F grafische Anzeige von Werten Java Basics - Anfänger-Themen 2
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
U Datentypen Ungenauigkeit von Double Werten Java Basics - Anfänger-Themen 5
L Datentypen Methode zum Abspeichern von Variablen mit größeren int-Werten Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben