Quadratische Gleichung mit JAVA lösen

boesl

Mitglied
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:

Java:
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

Java:
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

Java:
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:

Code:
-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.
 
Du könntest prüfen wieviele Elemente drin sind:

Java:
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:

Java:
return new double[0];

und dann:

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

Gruß, Kruemel
 
also statt

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

das hier:

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

und die if-Abfrage in die main packen?
 

Zurück
Oben