Quadratische Gleichung

mimix

Aktives Mitglied
Hallo

Ich habe das folgende Programm geschrieben:

Main Methode
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class QGBerechnen {
	/**
	 * @param args
	 * @throws IOException
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		System.out.println("Quadratische Gleichung");
		System.out.println("***********************");
		System.out
				.println("Formel für die Quadratische Gleichung ist: ax^2+bx+c=0");
		InputStreamReader inStream = new InputStreamReader(System.in);
		BufferedReader in = new BufferedReader(inStream);
		System.out.println("Geben Sie a ein:");
		String s = in.readLine();// Tastatureingabe
		double a = Double.parseDouble(s);

		System.out.println("Geben Sie b ein:");
		String t = in.readLine();// Tastaureingabe
		double b = Double.parseDouble(t);

		CQuadratischeGleichung rechnung = new CQuadratischeGleichung();// neues
		// Objekt
		// der
		// Klasse
		// CQuadratischGleichung
		// erstellen
		System.out.println("Geben Sie c ein:");
		String u = in.readLine();// Tastatureingabe
		double c = Double.parseDouble(u);

		rechnung.setQuadratischeGleichung(a, b, c);// Dem Objekt die Set-Methode
		// zuweisen, welche die
		// Variablen a, b und c
		// erhält.
		double plus = (double) rechnung.getQuadratischeGleichungPlus();// Neue
		// Variable
		// plus
		// vom
		// Typ
		// double
		// wird
		// erstellen,
		// welche
		// ihr
		// die
		// get-Methode
		// zugewiesen
		// wird.
		if (plus < 0) {// wenn die Variable plus kleiner als 0 ist dann
			System.out.println("Fehler! Resultat ist kleiner als 0, es ist: "
					+ plus);
		} else {// Sonst
			System.out.println("Ihre + Lösung:" + plus);
		}

		double minus = (double) rechnung.getQuadratischeGleichungMinus();
		if (minus < 0) {// Wenn Die Variable minus kleiner als 0 ist
			System.out.println("Fehler! Resultat ist kleiner als 0, es ist: "
					+ minus);
		} else {// Sonst
			System.out.println("Ihre - Lösung: " + minus);
		}
	}
}


Klasse

Java:
public class CQuadratischeGleichung {
	private double m_a;// Membervariablen
	private double m_b;
	private double m_c;

	public CQuadratischeGleichung() {// Konstruktor
	}

	public CQuadratischeGleichung(double a, double b, double c) {// Konstruktor
		m_a = a;
		m_b = b;
		m_c = c;
	}

	public void setQuadratischeGleichung(double a, double b, double c) {// Set-Methode
		m_a = a;
		m_b = b;
		m_c = c;
	}

	public double getQuadratischeGleichungPlus() {
		double b = m_b / 2;// p/2
		double m_z = b / m_a;// p/x^2
		double m_y = m_c / m_a;// q/x^2

		return (-m_z + Math.sqrt(m_z * m_z - m_y));// Formel, um die
		// Quadratische Gleichung zu
		// berechnen
	}

	public double getQuadratischeGleichungMinus() {// Get-Methode
		double b = m_b / 2;// p/2
		double m_z = b / m_a;// p/x^2
		double m_y = m_c / m_a;// q/x^2
		return (-m_z - Math.sqrt(m_z * m_z - m_y));// Formel, für die berechnung
		// der Quadratischen
		// Gleichung
	}
}

Ich bekomme aber immerwieder den Wert "NaN" zurück. Was muss ich tun?:bahnhof:
 
schonmal überlegt wie viel besser Menschen Fragen beantworten können, wenn du wichtige Informationen wie die eingegebenen Werte a, b, c auch mitteilst?

andereseits könntest du dann auch selber die Rechnung genauer verfolgen

wenn immer irgendwo Code wie
Java:
double b = m_b / 2;// p/2
double m_z = b / m_a;// p/x^2
double m_y = m_c / m_a;// q/x^2
steht, dann mache daraus:
Java:
double b = m_b / 2;// p/2
System.out.println("b ausgerechnet = .. ");
double m_z = b / m_a;// p/x^2
System.out.println("m_z ausgerechnet = .. ");
double m_y = m_c / m_a;// q/x^2
System.out.println("m_y ausgerechnet = .. ");
und da wo erstmals ein komischer Wert rauskommt schaue dir die Werte der Rechnung genauer an usw.

wenn man allgemein sehr viele solcher Schritte hat hilft Intervallhalbierung:
erst bei ca. 50% des Rechnungstands nachschauen ob schon was komisches dabei ist, wenn ja dann bei 25%, ansonsten bei 75% usw.
 
Das hier ist ein gutes Beispiel für "Ich mag nicht selber debuggen".

Da du keinen Laufzeitfehler oder Compilerfehler hast sondern "nur" dein Programm falsch arbeitet, solltest du erst mal selber debuggen. Und falls du das nicht kannst, lern es.

Der Tipp von Slater ist im übrigen der richtige Anfang.

Falls du ohne IDE arbeitest, solltest du dringend eine einfache IDE installieren, welche einen intuitiven Debugger bietet (Ich würde zu NetBeans tendieren, aber das ist Geschmackssache).
 
[java=22] public double getQuadratischeGleichungPlus() {
double b = m_b / 2;// p/2
double m_z = b / m_a;// p/x^2
double m_y = m_c / m_a;// q/x^2

return (-m_z + Math.sqrt(m_z * m_z - m_y));// Formel, um die
// Quadratische Gleichung zu
// berechnen
}
[/code]
[c]m_z[/c] stimmt irgendwie nicht mit seinem Kommentar überein…

Ich bekomme aber immerwieder den Wert "NaN" zurück.
Immer? Zum Beispiel nicht bei 10, 10, -5. NaN bekommst Du, wenn die Rechnung kein Ergebnis hat. Zum Beispiel bei einer Quadratwurzel aus einer negativen Zahl (gibt's ja bekanntlich bei reellen Zahlen nicht).

Nachtrag: Mann war ich langsam…

Ebenius
 
Zuletzt bearbeitet:
Nachtrag 2: Die Benennung Deiner Variablen ist auch etwas seltsam. Wenn man Variablen mit [c]m_[/c] anfangen lässt, dann tut man das in der Regel, um Members von lokalen Variablen abzugrenzen. [c]m_z[/c] und [c]m_y[/c] würde ich daher als falsch bezeichnet betrachten.

Außerdem solltest Du Deine Kommentare mal zusammen stauchen (also die unsinnigen Zeilenumbrüche raus). Das erhöht die Lesbarkeit Deiner Programme und damit auch die Wahrscheinlichkeit, dass Du oder andere Fehler schnell finden.

Ebenius
 
😀 Programm hat die ganze Zeit funktioniert.. nur die Werte die ich eingegeben habe waren falsch somit konnte er mir auch kein Resultat liefen :lol::lol:

Vielen Dank :toll::toll:
 
Das hier ist ein gutes Beispiel für "Ich mag nicht selber debuggen".

Da du keinen Laufzeitfehler oder Compilerfehler hast sondern "nur" dein Programm falsch arbeitet, solltest du erst mal selber debuggen. Und falls du das nicht kannst, lern es.

Der Tipp von Slater ist im übrigen der richtige Anfang.

Falls du ohne IDE arbeitest, solltest du dringend eine einfache IDE installieren, welche einen intuitiven Debugger bietet (Ich würde zu NetBeans tendieren, aber das ist Geschmackssache).

Ich hab ja gesagt... debuggen lernen. Noch vor den genannten Vorschlägen steht natürlich:

PRÜFE DIE EINGABE ...

:autsch:

PS: Dann markier das Thema wenigstens als gelöst.
 

Zurück
Oben