Swap Methode

  • Themenstarter Themenstarter justintime
  • Beginndatum Beginndatum
J

justintime

Gast
Hi ich habe glaub ich ein Verständnis Problem mit der swap Geschichte.

Habe die Punkte p1 (4, 3) und p2 (8, 9) und die sollen nun vertauscht werden so am Ende steht:
p1: 8, 9
p2: 4,3

Hier mal mein Java Code:


import java.awt.*;
public class Test {

public static void swap(int p1, int p2) {
int temp = p2;
p2 = p1;
p1 = temp;
}
public static void main (String [] args) {

Point p1 = new Point(4, 3);
Point p2 = new Point(8, 9);
swap(p1,p2);
System.out.println("p1: ("+p1.x+", "+p1.y+")");
System.out.println("p2: ("+p2.x+", "+p2.y+")");

}
}


Vielleicht kann mir ja einer helfen.
Danke im Voraus.
 
Java:
	public static void swap(Point p1, Point p2) {
		Point tmp = (Point) p1.clone();
		p1.x = p2.x;
		p1.y = p2.y;
		p2.x = tmp.x;
		p2.y = tmp.y;
	}
 
Cool Danke, dit klappt.

Aber kann mir das einer kurz erklären??
Das ich den Fehler hatte und zuvor p1 und p2 mit int deklariert habe ist mir bewusst.
Aber auf diesen Teil Point tmp = (Point) p1.clone();
p1.x = p2.x;
p1.y = p2.y;
p2.x = tmp.x;
p2.y = tmp.y;
währe ich irgendwie nicht gekommen.

Danke im Voraus.
 
So ganz falsch war das nicht was XHelp geschrieben hatte, bzw. er meinte wohl das Richtige.
Das p1 und p2 innerhalb der Methode sind Kopien der Referenzen aus der main! D.h. diese Referenzen haben nichts mit denen zu tun aus deiner main-Methode(schließlich hättest du sie ja auch einfach anders nennen können!)
D.h. was du gemacht hast war, du hast einfach die Referenzen der "Kopien" getauscht. Dein Code würde funktionieren, wenn du diesen direkt hinter der Deklaration der Punkte in der main schreiben würdest:
Java:
	public static void main(String[] args) {
		Point p1 = new Point(4, 3);
		Point p2 = new Point(8, 9);
		//swap(p1, p2);
		Point temp = p2;
		p2 = p1;
		p1 = temp;
		System.out.println("p1: (" + p1.x + ", " + p1.y + ")");
		System.out.println("p2: (" + p2.x + ", " + p2.y + ")");
	}
Da p1 und p2 in swap aber eben andere Referenzen sind und du das so also nicht machen kannst(das würde eben nur zur Folge haben, dass p1 und p2 in swap geändert wären),
Java:
	public static void swap(Point p1, Point p2) {
		Point temp = p2;
		p2 = p1;
		p1 = temp;
		System.out.println("p1: (" + p1.x + ", " + p1.y + ")");
		System.out.println("p2: (" + p2.x + ", " + p2.y + ")");
	}
musst du eben wirklich die Werte der Objekte tauschen! (das ist ja eig. auch das was du machen willst!)
 
Mehr dazu unter den Themen "Call by value" und "Call by reference".
(Und egal, was du sonst dazu liest: In Java gibt es NUR(!) "Call by value")
 

Zurück
Oben