Probleme mit equals() und clone()

deiwid

Grünschnabel
Hi, hab das Programm fertig(array soriteren, kleinster wert finden...), muss aber noch die Methoden equals und clone hinzufügen. Es geht aber nicht so wie ich will und das was ich mit google finde hilft mir nicht wirklich.

Ich muss ein Array kopieren und vergleichen.

PHP:
public class Array {

	private int[] a;
 
    public Array(int n) {
        a = new int[n];        
    }
    
    public int[] getArray(){
        return a;
    }

    public boolean equals (Array c) {
           if (this != c) {
                return true;
            }
         return false;

    public int[] clone () {

        return new Array(int x);
    }
        }

Testklassen:
PHP:
		b.setArray(new int[]{12, 12, 12, 45, 45, 45, 45, 45, 56, 34});
		a.setArray(new int[]{12, 12, 45, 489, 76});
		c.setArray(new int[]{1, 2, 3, 4});
		d.setArray(new int[]{1, 2, 3, 4});


		if(c.equals(a)){
			System.out.println("Das Array ist gleich! Ich freu mich!"); }
			else {
				System.out.println("Ich mag das Array nicht!");
		}
		
 
		Array f = new Array(5);
		Array klonen = (Array) d.clone();
		System.out.println(klonen.toString());
		
	}

So habe ich mir das ungefähr vorgestellt. Funkt aber net. Bitte um Hilfe!!
 
Wenn du deinen Code in [code=java] [/code] statt [code] [/code] Tags schließt, werden die Elemente auch richtig hervorgehoben – nur so nebenbei.

Was funktioniert nicht? Welche Exception wird geworfen?

von welchem Typ sind denn a, b, c, d ? was soll die Methode .setArray() ?
Ein Array ist eine Collection mit Referenzen auf verschiedene Objekte. Klonen solltest du es nicht, indem du die Methode .clone() aufrufst, sondern Arrays.copyOf(), das gleiche gilt für equals().
Außerdem solltest du Arrays.toString() nutzen.

Die Klasse Array gibt es außerdem schon, und zwar im Paket java.lang.reflect
 
Hi,

eine Clon von deiner Klasse Array solle auch von der Klasse Array sein, und kein int-Array, oder? Also erstellst du ein neues Objekt deiner Klasse mit der gleichen Länge wie das alte Array:
Java:
Array clon = new Array(int a.length);
Jetzt noch die Werte übergeben:
Java:
clon.setArray(a);
return clon;
Wenn ich deine Methode setArray richtig verstanden habe, müsste das so gehen ;)
Natürlich hat aber genodeftest recht, dass die Methode Arrays.copyOf sehr viel schöner ist.
Jetzt zu deiner equals-Methode: der ==-Operator gibt nur true zurück, wenn es sich um identische Objekte handelt, aber nicht wenn nur der Inhalt der Objekte gleich ist. Beispiel:
Java:
Point p1 = new Point(1,2);
Point p2 = new Point(1,2);
Point p3 = p1;
System.out.println(p1 == p2); // false
System.out.println(p1 == p3); // true
Also musst du die Inhalte deiner int-Arrays vergleichen. Du lässt sie eine Schleife durchlaufen und sobald zwei Werte von eineander abweichen gibts du false zurück.
Schöner geht es wieder mit der vorimplementierten Methode der Klasse Arrays.

Grüße, Cymatoxa
 
Zu Equals:
Da gebe ich meinem Vorredner recht, wobei ich da einfach auf die Arrays.equals Methode zurückgreifen würde. Da es sich aber stark nach einer Übungsaufgabe anhört, ist der Schleifenweg der gewollte :)
Zu clone:
Das clone was du meinst. ist das wenn man Clonable implementiert? Wenn ja musst du zuerst super.clone() aufrufen, damit sichergestellt ist, dass das richtige Object zurückkommt, ansonsten kann es durch zB Vererbung sich um ein anderes Objekt handeln, was du clonen willst.
Oder du benutzt ein anderes Pattern zum clonen, zB ein Copy-Konstructor.
 
Hey,

Java:
    public boolean equals (Array c) {
           if (this != c) {
                return true;
            }
         return false;

Fehlt da zum EInen nicht die abschließende Klammer?
Und zum anderen ist es andersrum.
Wenn
Java:
    public boolean equals (Array c) {
           if (this == c) {
                return true;
            }
         return false;
(Beachte aber die anderen Antworten)

Zumal du bei eigenen Objekten Attribute vergleichen solltest,
z.B.
Java:
    public boolean equals (Array c) {
           if (this.getArray() == c.getArray()) {
                return true;
            }
         return false;
Sonst kannst du dir die equals ziemlich sparen.


mfg
bo
 
Zuletzt bearbeitet von einem Moderator:
...und nebenbei der eigentliche Inhalt des Programms:

Code:
Arrays.sort[array]; //Arrays sortieren
return array[0]; // kleinsten Wert zurückliefern
 
Zurück