Objektinhalte tauschen

Yurek

Mitglied
Hi

bei mir hängts leider an einer Stelle gerade:


Gegen ist die Klasse Test

Code:
public class Test {
   int a;
   Test(int i){
   a = i;
   }

Als erstes musste ich die Sichtbarkeiten und die Zugriffsfunktionen definieren eine versteckte Frage die er nie angibt!

Jetzt zu der eigentliche Aufgabe: Schreiben sie die Mehtode void Swap(Test t1; Test t2) die die Einträge der beiden Test Instanzen t1 und t2 miteinander vertauscht;

Versuch bisher:

Code:
public void Swap(Test t1, Test t2){
       
       
        Test merke = new Test(t1);
       
        t1.setA(t2.getA());
       
        t2.setA(merke.getA());

    }

Wäre das überhaupt so richtig und erlaubt?? Entweder spackt mein Eclipse rum oder das ist falsch da es nicht funktioniert!

Danke schon mal!
 

sKVie

Neues Mitglied
Wenn du dir für diese Methode swap eine Getter/Setter Methode implementierst wie du es in deinem Code beschrieben hast, ist es generell der richtige Weg.
 

Thallius

Top Contributor
Code:
Test merke = new Test(t1);

überlege mal warum das so nicht funktionieren kann.

Gruß

Claus
 

Yurek

Mitglied
@JeromeC Ja sry hab mich hier verschrieben. Die getA ist die Getter Methode von i. In der Fragestellung ist das nicht dabei aber wir müssen es so machen sonst gibts Punktabzüge es ist quasi eine versteckte Aufgabenstellung die Instanvariablen privat zu machen und die Zugriffsmethoden getter und setter zu erstellen.

@sKVie Ja es funktioniert danke konnte es heute testen keine Ahnung was gestern schief ging.

@Thallius Wieso sollte es nicht funktionieren. Ich haue mein t1 Objekt in ein neues Objekt rein womit ich mir den Inhalt meines T1 Objektes merken kann und stopfe das t1 mit dem Inhalt des T2 und stopfe dann das t2 mit dem Merke Objekt!

Hier wurde es ja ähnlich so gemacht: http://www.java-forum.org/thema/objekte-tauschen.113213/

Danke für die Antworten!
 

VfL_Freak

Top Contributor
Moin,
Wieso sollte es nicht funktionieren?
Ich haue mein t1 Objekt in ein neues Objekt rein, womit ich mir den Inhalt meines T1 Objektes merken kann
Nein und Nein - beides nicht!
Erstens 'haut' man nicht und wenn Du es einfach mal ausprobieren würdest, würdest merken, dass Dein Compiler hier meckert!
Deshalb (wie schon geschrieben): schau mal ganz genau hin, was bei diesem Konstruktoraufruf passiert !!

Deswegen muss es ja nun nicht zwingend richtig sein :p

Gruß Klaus
 

Yurek

Mitglied
Also gemeckert hat er nicht aber ich denke ihr wollt lieber hier drauf:

Code:
Test merket1 = new Test(t1.getA());
     
        t1.setA(t2.getA());
     
        t2.setA(merket1.getA());

Hier mal mein vollständiger Code:

Code:
public class Testen {

    public static void main(String[] args){
     

        Test t1 = new Test(25);
     
        System.out.println(t1.getA());
     
        Test t2 = new Test(35);
     
        System.out.println(t2.getA());
     
        Test t = new Test();
        t.swap(t1, t2);
        System.out.println();
     
        System.out.println(t1.getA());
        System.out.println(t2.getA());

     
    }


Code:
public class Test {
 
    private int a;
 
    public Test(int i){
        setA(i);
    }
 
    public Test(){
     
    }
 
    public Test(Test t){
        setA(t.getA());
    }
 
 
    public void swap(Test t1, Test t2){
     

     
        Test merket1 = new Test(t1.getA());
     
        t1.setA(t2.getA());
     
        t2.setA(merket1.getA());
     
    }

 
 
 
 
    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

}

Funktioniert! Aber vorher hats auch funktioniert ohne das t1.getA(). Wieso aber? Was mache ich wenn meine Klasse mehr als nur eine Instanzvariable und mehr Zugriffsmethoden hat.

Also Ausgabe ist jetzt und auch vorher:

25
35

35
25
 

JStein52

Top Contributor
In deinen Postings davor hast du auch nichts von einem Konstruktor erwähnt der ein Test-Objekt entgegennimmt.
Nur mit dem was du gepostet hast wäre es falsch gewesen !

Und wenn du mehr als eine Instanzvariable hast schreibst du nacheinander:

merket1.setA(t1.getA);
merket1.setB(t1.getB);
usw.

und genauso beim eigentlichen vertauschen
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben