Methoden überladen - wo steckt der Denkfehler?

Cherrycoke

Mitglied
Hi,

ich bin ein blutiger Javaanfänger und versuche folgende Übungsaufgabe zu lösen. Meine Klasse soll 3-diminsionale Vektoren erstellen und diese subtrahieren und addieren können. Folgendes Programm habe ich nun dazu geschrieben.

Java:
/**
* Klasse Vector3D
* Eine Implementierung zum Umgang mit drediminionalen Vektoren.
*
* @author Safran Quader
* @version 09.05.2010
*/

class Vektor3D{
	
	//Objektattribut
	static private double[] xyz = new double[3];
	
	
	/**
	* erzeugt einen Nullvektor
	*/
	Vektor3D(){
		xyz[0] = 0;
		xyz[1] = 0;
		xyz[2] = 0;
	}
	
	/**
	* erzeugt einen Vektor mit spezifizierten Initialisierungen
	* @param x Der spezifizierte Wert der x-Koordinate
	* @param y Der spezifizierte Wert der y-Koordinate
	* @param z Der spezifizierte Wert der z-Koordinate
	*/
	Vektor3D(double x, double y, double z){
		xyz[0] = x;
		xyz[1] = y;
		xyz[2] = z;
	}
	
	/**
	* Liefert zu zwei übergebenen Vektoren deren Summe zurück
	* @param v Ein beliebiger Vektor
	* @param w Ein weiterer beliebiger Vektor
	* @return Die Summe von Vektor v und Vektor w
	*/
	static Vektor3D plus( Vektor3D v, Vektor3D w){
		Vektor3D sum = new Vektor3D();
		int i;
		
		for( i = 0; i < 3; i++ ){
			sum.xyz[i] = v.xyz[i] + w.xyz[i];
		}
		
		return sum;
	}
	
	/**
	* Liefert die Differenz zwischen dem Objekt selbst und dem übergebenen Vektor zurück
	* @param v Ein beliebiger Vektor
	* @return Die Differenz zwischen dem Objekt selbst und dem Vektor v
	*/
	static Vektor3D minus( Vektor3D v ){
		Vektor3D dif = new Vektor3D();
		int i;
		
		for( i = 0; i < 3; i++){
		 dif.xyz[i] = xyz[i] - v.xyz[i];
		}
		
		return dif;
	}

	
	public static void main( String[] argv ){
	
		Vektor3D a = new Vektor3D();
		Vektor3D b = new Vektor3D(2, 2, 2);
		
		System.out.println(a.xyz[0]);
		System.out.println(a.xyz[1]);
		System.out.println(a.xyz[2]);
		System.out.println(b.xyz[0]);
	}
}

Wie gesagt - ich bin Anfänger. Wie an meiner Ausgabe zu sehen ist, scheint das Objekt a und Objekt b gleich zu sein (Es wird 4x 2.0 ausgegeben). Aber warum? Objekt a hat doch nur 3x die Werte 0.0. Kann mir jemand kurz erklären, warum dem nicht so ist? Wie erstelle ich die Objekte so, dass ich auch wirklich drei verschiedene Objekte habe? Und vor allem, wie greife ich dann auf diese zu?

Danke für die Antworten!
 
Zuletzt bearbeitet von einem Moderator:
Einfache Sache.
Java:
static private double[] xyz = new double[3];
Deine Variable xyz ist nicht wie du wahrscheinlich vermutest, eine Instanzvariable, sondern eine Klassenvariable. Oder anders gesagt: Durch das static ist die Variable xyz nicht an eine Objektinstanz gebunden, sondern an die Klasse. Das heißt es ist egal, in welchem Objekt du die Werte änderst, die Änderung gilt für alle Objekte.

Mach das static einfach weg und dann wird es so arbeiten, wie du es dir vorstellst.
 
Diese Methode:
Java:
static Vektor3D minus( Vektor3D v ){
solltest du auch entweder mit zwei Parametern oder als nicht statische Funktion definieren. ;)
Sonst funktioniert die Methode auch nicht statisch.
 
Zurück