# Quadratische Gleichung mit JAVA lösen



## boesl (3. Apr 2011)

Hy,

bin noch neu auf dem Gebiet der JAVA Programmierung, genauer gesagt hab ich im Februar damit angefangen.

Folgende Aufgabenstellung:


> Schreiben Sie eine Methode "root", die die Lösungen x0,1 einer quadratischen Gleichung ax2 bx + c = 0 als double-array ausgibt.
> 
> Wenn beide Lösungen reell sind, dann soll das Ergebnisarray 2 Elemente haben, fallen beide Lösungen zusammen, dann soll das Ergebnisarray nur 1 Element haben, sid die Lösungen komplex, dann ein leeres Ergebnisarray zurück gegeben werden



Soweit sogut, die Methode steht an und für sich, nur mit der Ausgabe hab ich dann so meine Probleme.
Hier mal mein Code:


```
public class Main {

    public static void main(String[] args) {
        double[] x = MyMath.root(2, 10, 3);
    	
        System.out.println(x[0]);
        System.out.println(x[1]);

    }

}

class MyMath {    
     
     public static double[] root (int a, int b, int c) {
    	 
    	 // Loesungsmenge kann anhand der Diskriminante ( x = b*b - 4*a*c) abgelesen werden
    	 // [url=http://de.wikipedia.org/wiki/Quadratische_Gleichung#Diskriminante]Quadratische Gleichung ? Wikipedia[/url]
    	 double x = b*b  - 4*a*c;
    	 
    	 // wenn x < 0 -> keine reelle Loesung
    	 if (x < 0) {
    		 double[] z = new double[2];
    		 return z;
    		 
    		 // wenn x = 0 -> x1 & x2 liefern das selbe Ergebnis
    	 } else if (x == 0) {
    		 double[] z = new double[1];
    		 z[0] = (-1 * b) / (2 * a);
    		 return z;
    		 
    		 // wenn x > 0 -> 2 Loesungen
    	 } else {
    		 double[] z = new double[2];
    		 z[0] = (- b + MyMath.squareroot(x)) / (2 * a);
    		 z[1] = (- b - MyMath.squareroot(x)) / (2 * a);
    		 return z;
    	 }
     }
}
```

Die Methode MyMath.squareroot ist eine selbstgebastelte Funktion die die Wurzel berechnet, da keine Standardfunktionen verwendet werden dürfen

Das Problem das ich nun habe:
so wie der Code dasteht, funktioniert es ohne Probleme, unter der Wurzel kommt 76 heraus, dh ich bekomme 2 Lösungen.

Wenn ich nun die Zahlen verändere, zB


```
double[] x = MyMath.root(5, 10, 5);
```

würde unter der Wurzel 0 herauskommen und es soll nur ein Ergebnis geliefert werden. Dadurch dass ich aber in main


```
System.out.println(x[0]);
System.out.println(x[1]);
```

stehen habe, will Java mir natürlich ein 2tes Array liefern, was es aber nicht gibt, daher bekomme ich folgende Meldung:


```
-1.0
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
	at root.Main.main(Main.java:17)
```

Hat jemand einen Verbesserungsvorschlag für mich, stehe nun ziemlich auf der Leitung.


----------



## Kruemel (3. Apr 2011)

Du könntest prüfen wieviele Elemente drin sind:


```
System.out.println("x1: " + x[0]); 

if(x.length>1)
    System.out.println("x2: " + x[1]);
```

Festzustellen ob es keine Lösung gibt wäre natürlich noch gut.
D.h. wenn es keine Lösung gibt könntest du tatsächlich ein Array ohne Elemente zurückgeben:


```
return new double[0];
```

und dann:


```
if(x.length==0){
    System.out.println("Keine Lösung");
}
```

Gruß, Kruemel


----------



## Final_Striker (3. Apr 2011)

boesl hat gesagt.:


> Hat jemand einen Verbesserungsvorschlag für mich, stehe nun ziemlich auf der Leitung.



Nutze eine Schleife um das Array in der main-Methode auszugeben.


----------



## boesl (3. Apr 2011)

also statt


```
// wenn x < 0 -> keine reelle Loesung
         if (x < 0) {
             double[] z = new double[2];
             return z;
```

das hier:


```
// wenn x < 0 -> keine reelle Loesung
         if (x < 0) {
             return new double[0];
...
```

und die if-Abfrage in die main packen?


----------



## boesl (3. Apr 2011)

Final_Striker hat gesagt.:


> Nutze eine Schleife um das Array in der main-Methode auszugeben.



Hm, so wie Kruemel geschrieben hat meinst du wohl?


----------



## Gast2 (3. Apr 2011)

boesl hat gesagt.:


> Hm, so wie Kruemel geschrieben hat meinst du wohl?



Nö, da war ja keine Schleife drin 


```
public static void main(String[] args) {
        double[] x = MyMath.root(2, 10, 3);
        for(double d : x){
            System.out.println("Lösung: "+d);
        }
 
    }
```


----------

