Java tiefe Kopie eines Arrays erstellen und Kopie dann sortieren

king0r

Lt. Junior Grade
Registriert
Juli 2009
Beiträge
485
Hallo Leute,

ich habe mir eine Klasse zur Erstellung von Arrays gebastelt mit Konstruktoren etc.
Nun möchte ich eine tiefe Kopie eines vorhandenen Arrays erstellen und dann sortieren.
Mit Hilfe der sort() Methode bekomme ich es einfach nicht hin.

Variable:
Code:
private int[] number;

Hier mein Konstruktor:
Code:
public Test(int length) {
		number = new int[length];
		for (int i = 0; i < umber.length; i++)
			zahl[i] = 0;
	}

Hier meine Kopie:
Code:
Test copy = new Test(number.length); 
		System.arraycopy(number, 0, copy, 0, number.length);

Bei der wahren tiefen Kopie, die ja eigentlich so gehen sollte:
Code:
for (int i = 0; i < number.length;i++) 
		copy[i] = number[i].clone();

bringt mir Eclipse folgendes:
- The type of the expression must be an array type but it resolved
to Array
- Cannot invoke clone() on the primitive type int

Und wenn ich mit
Code:
Arrays.sort(copy);
meine Kopie sortieren will, bringt mir Eclipse folgendes:
The method sort(long[]) in the type Arrays is not applicable for the arguments (Array)

Ich stehe da leider grad voll auf dem Schlauch, da ich mich auch erst seit kurzem mit Arrays beschäftige.

Ich hoffe, dass mir da jemand weiterhelfen kann.

Besten Dank!
 
Für die clone Methode brauchst du Klassen, die von Object erben. Das sind alle bis auf die primitven Datentypen. Du könntest z.B. statt eines int-Arrays ein Integer-Array benutzen (Integer ist eine Wrapperklasse für int).
 
Primitive Datentypen wie int kann man in Java einfach mit
Code:
copy[i] = number[i];
kopieren.

Außerdem willst du wohl copy nicht als
Code:
Test copy = new Test(number.length);
anlegen, sondern als
Code:
int[] copy = new int[number.length];
 
Soweit ich das hier sehe ist das Problem das du die Instanz deiner eigenen Klasse als Paramter übergiebst. Mit der kann die Methode arraycopy allerdings nichts anfangen.

System.arraycopy(number, 0, copy.number, 0, number.length);

Wenn du denn hier Fett unterlegten Teil hinzufügst (ich nehme an das die Klasse test eine Variable hat die int[] number heisst) sollte es gehen.

Oder du schreibst dir folgendermaßen eine eigene arraycopy Methode

void arraycopy(int[] array1, int pos1, Test test, int pos2, int length){
System.arraycopy(array1, pos1, test.number, pos2, length);
}

Dann könntest du deine eigene Klasse als Parameter übergeben
 
Zurück
Oben