# Komplexe Zahlen



## orangata (18. Mrz 2012)

Ich möchte zwei komplexe Zahlen addieren und miteinander multiplizieren.
Leider klappt es noch nicht so, wie ich es mir vorstelle:
Fehler z.B. in Zeile 12 angezeigt :

```
public class Complex{
	double x1;       // Realteil  Zahl 1
	double x2;       // Realteil  Zahl 2 
	double y1;       // Imaginaerteil Zahl 1
	double y2;       // Imaginaerteil Zahl 2
	String i;
	Complex(double x1,double x2,double y1, double y2){
		this.x1=x1;
		this.x2=x2;
		this.y1=y1;
		this.y2=y2;}
	Complex add(Complex z){    // Addition zweier komplexer Zahlen
		z=(x1+x2)+"+"+(y1+y2)/*+"*i"*/;
		return z;}
	Complex mult(Complex z){  // Multiplikation zweier komplexer Zahlen 
		z=(x1*x2-y1*y2)+"+"+(x1*y2+x2*y1)/*+"*i"*/;
		return z;}
	Complex mult(double a){
		double z=(a*x1)+(a*y1)/*+*i*/;
		return z;}
	double Re(){
		return(x1+x2);}
	double Im(){
		return(y1+y2);}
		}
```

Wo liegt mein Fehler?
Danke im voraus .


----------



## Gast2 (18. Mrz 2012)

Würdest du uns denn vielleicht noch verraten welche Fehlermeldung auftritt?

PS:
Formatier deinen Quelltext mal gescheit.


----------



## orangata (18. Mrz 2012)

Folgende Fehlermeldungen werden angezeigt:
Complex.java:13: incompatible types
found   : java.lang.String
required: Complex
		z=(x1+x2)+"+"+(y1+y2)/*+"*i"*/;
		             ^
Complex.java:16: incompatible types
found   : java.lang.String
required: Complex
		z=(x1*x2-y1*y2)+"+"+(x1*y2+x2*y1)/*+"*i"*/;
		                   ^
Complex.java:20: incompatible types
found   : double
required: Complex
		return z;}
		       ^
3 errors


----------



## Gast2 (18. Mrz 2012)

Das ist aber Zeile 13 und nicht 12 

Du versuchst deinen Complex Objekt nen String zuzuweisen, das geht natürlich nicht. Du musst den Realteil und Imaginärteil berechnen und daraus dann nen neues Complex Objekt erzeugen dass du dann zurückgibst.


----------



## orangata (18. Mrz 2012)

Sorry, es ist Zeile 13 und nicht 12.
Ich habe gedacht, dass die Komplexe Zahl Hintereinander aufgeschrieben , ja nichts anderes als ne Zeichenkette ist, also ein String.
Es ist doch aber auch kein int oder double.


----------



## Fu3L (18. Mrz 2012)

```
public class Complex{
    double x1;       // Realteil  Zahl 1
    double x2;       // Realteil  Zahl 2 
    double y1;       // Imaginaerteil Zahl 1
    double y2;       // Imaginaerteil Zahl 2
```

Eine Klasse, die eine Komplexe Zahl darstellt, sollte lediglich von einer Zahl den Real- und Imaginärteil tragen.



> Ich habe gedacht, dass die Komplexe Zahl Hintereinander aufgeschrieben , ja nichts anderes als ne Zeichenkette ist, also ein String.



Wenn du irgendwas aufs Papier bringst, ist alles erstmal ein String 
Als Hinweis: Eine Komplexe Zahl könnte folgenden Konstruktor haben:


```
public Complex(double real, double img) {
this.real = real;
this.img = img;
}
```

Vllt hilft das ja


----------



## Final_Striker (18. Mrz 2012)

orangata hat gesagt.:


> Ich habe gedacht, dass die Komplexe Zahl Hintereinander aufgeschrieben , ja nichts anderes als ne Zeichenkette ist, also ein String.
> Es ist doch aber auch kein int oder double.



Nein, die Addition von zwei komplexen Zahlen ergibt eine komplexe Zahl. Keinen int, double oder String. 

Wenn du z.B. 2 und 3 addieren willst, ist das Ergebnis ja nicht 2 + 3 , sondern 5. ;-)


----------



## orangata (18. Mrz 2012)

Heißt das jetzt, dass ich eine komplexe Zahl dann nicht als x1+y1*i schreiben darf , sondern prinzipiell mit RealT und ImaT abkürze.


----------



## Fu3L (18. Mrz 2012)

Ganz genau.
Real + i*Img ist eine Darstellungsform, so wie ein Punkt im 2D-Koordinatensystem ebenso eine Darstellung ist. Wenn du eine Klasse schreibst, suchst du nach der Idee hinter etwas. Und diese Idee ist einfach, eine Zahl aus 2 Teilen zusammenzusetzen.
Deswegen musst du zB in einer add Methode von der Klasse auf der du die methode aufrufst den Realteil plus den Realteil der übergebenen Komplexen Zahl rechnen. Das gleiche für den Imaginärteil. Dann erstellst du eine neue Komplexe Zahl mithilfe deiner beiden Ergebnisse und gibst diese zurück (oder modifizierst die Zahlen der komplexen zahl auf der add aufgerufen wird. Was dir lieber ist)


----------



## Landei (18. Mrz 2012)

Du musst klar unterscheiden zwischen dem Inhalt deiner Klasse und der Repräsentation nach außen hin. Als Inhalt benötigst du etwas, womit du auch rechnen kannst, also z.B. Real- und Imaginärteil als [c]double[/c]. Für eine hübsche Darstellung auf der Konsole überschreibst du die [c]toString[/c]-Methode, damit bei einem [c]System.out.println[/c] ein "42+4i" oder so rauskommt.


----------

