If/else nicht korrekt ausgeführt.

Lybrial

Bekanntes Mitglied
Huhu,

hab vor kurzem mein Informatik Studium begonnen und im Fach Objektorientierte Programmierung bekam ich jetzt
die Aufgabe, ein Programm zu schreiben, das mir die Mitternachtsformel berrechnet.
So weit so gut, ich denke ich habe es geschafft, einige Zahlen habe ich bereits getestet, allerdings habe ich ein
Problem:

Er unterscheidet nicht wirklich die Fälle die ich am Ende des Programms unterschieden habe.
Also wenn a = 0 ist, dann gibt er mir zwar aus, dass es nur eine Nullstelle gibt geht im
Programm aber dann noch weiter und gibt x1 nochmal und dazu x2 mit dem wert Infinity aus.
Ebenso bezieht er die Option nicht richtig ein, dass die Diskriminante 0 sein könnte, er gibt
"Keine Nullstellen!" garnicht aus sondern nur wieder x1 und x2 mit den werten NaN.

Java:
import java.util.Scanner;
public class Aufgabe1 {
	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		
		double a, b, c;
		double x1, x2;
			
		System.out.println("Bitte Werte eingeben: ");
		System.out.print("a: ");
		a = input.nextInt();
		System.out.print("b: ");
		b = input.nextInt();
		System.out.print("c: ");
		c = input.nextInt();
		
		x1 = -c/b;		
		if (a == 0.0)
			System.out.println("Eine Nullstelle bei: " +x1);
		else if (Math.sqrt(b*b+4.0*a*c) < 0.0)
			System.out.println("Keine Nullstellen!");
		else
			x1 = (-b+Math.sqrt(b*b+4.0*a*c))/(2.0*a);
			x2 = (-b-Math.sqrt(b*b+4.0*a*c))/(2.0*a);
			System.out.println("X1 = " +x1);
			System.out.println("X2 = " +x2);
		}
	}
 

nrg

Top Contributor
{ und } sind deine Freunde ;)

ohne nimmt eine Kontrollstruktur genau ein Statement mit und das endet mit dem nächsten Semikolon
 

jason

Mitglied
Schau dir mal Zeile 23 und die danach an.

Nach if oder else muss immer ein {}-Block folgen, es sei denn, der Rumpf der if-Abfrage ist nur eine Zeile lang.
Das heißt also im Klartext, dass der Compiler Zeile 24 als zugehörig zu else (Zeile 23) sieht, Zeile 25 usw. aber nicht mehr.

MfG jason
 

Lybrial

Bekanntes Mitglied
Wenn ich die Klammern drum mach bekomme ich den Fehler in der CMD:
java:27: 'else' without 'if'
else if (Math.sqrt(b*b+4.0*a*c) < 0.0)
^
 

Lybrial

Bekanntes Mitglied
Java:
{
if (a == 0.0)
            System.out.println("Eine Nullstelle bei: " +x1);
        else if (Math.sqrt(b*b+4.0*a*c) < 0.0)
            System.out.println("Keine Nullstellen!");
        else
            x1 = (-b+Math.sqrt(b*b+4.0*a*c))/(2.0*a);
            x2 = (-b-Math.sqrt(b*b+4.0*a*c))/(2.0*a);
            System.out.println("X1 = " +x1);
            System.out.println("X2 = " +x2);
}

Na hierrum natürlich ^^

EDIT: Den Fehler konnte ich beheben, allerdings ist das Problem nach wie
vor das im ersten Post beschriebene (trotz Klammern und ja, ich habe erst nochmal
neu compiliert ;))
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Es sollte wohl eher so aussehen:
Java:
if (bedingung) {
} else if (bedingung) {
} else {
}
 

Lybrial

Bekanntes Mitglied
Wenn ich die Klammern so setze, bleibt nur noch das Problem übrig,
dass mir nicht die Meldung angezeigt wird "Keine Nullstellen!" wenn
die Diskriminante < 0 ist sondern stattdessen mir wieder die
x1 = NaN und
x2 = NaN ausgegeben werden.
 

XHelp

Top Contributor
Naja...
Java:
if (Math.sqrt(b*b+4.0*a*c) < 0.0)
Wann erwartest du denn ein negatives Ergebnis beim Wurzelziehen?
 

Lybrial

Bekanntes Mitglied
Na wenn c < 0 oder a < 0?
Oder hab ich da nen Denkfehler?

EDIT: -.- dann wär es klüger wenn ich if (c < 0 | a < 0)
nehme, Danke funzt jetzt alles^^
 
Zuletzt bearbeitet:

Landei

Top Contributor
Zuerst auf negative Diskriminante testen, und nur wenn das nicht der Fall ist, die Wurzel ziehen. Denn was macht Math.sqrt(-1)? Richtig, es macht ganz laut bumm!

Na wenn c < 0 oder a < 0?
Oder hab ich da nen Denkfehler?

EDIT: -.- dann wär es klüger wenn ich if (c < 0 | a < 0)
nehme, Danke funzt jetzt alles^^

Nein, das ganze b*b + 4*a*c testen. Wenn z.B. b == -10, a =-1, c=1, dann hast du 100-4, und daraus kannst du bequem die Wurzel ziehen. Übrigens heißt (c < 0 | a < 0) noch lange nicht, dass a * c negativ ist, denn bekanntlich ist -1 * -1 == 1
 
Zuletzt bearbeitet:

Devil_Noe

Mitglied
Hi!

Ohne den Code jetzt angesehen zu haben:

sämtliche fliesskommazahlen sollten eigentlich nicht direkt mit "==" geprüft werden, sonder immer mit einer fehlerschranke verglichen werden (es seidenn es ist wirklich gewünscht, daß die bedingung nur bei einer ganze zahl ausgeführt wird).

Bsp: if (float x == 2.0) ..... funktioniert nur bei exakt 2.0 (bei komplizierten berechnunge unwahrscheinlich)

sollte dies aber auch bei 2.000000001 geschehen muss man eine fehlerschranke definieren und dann mit dieser vergleichen!

vielleicht hilfts

LG
 

Lybrial

Bekanntes Mitglied
Mein Code sieht jetzt so aus:

Java:
import java.util.Scanner;
public class Aufgabe1 {
	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		
		double a, b, c;
		
		System.out.println("Bitte Werte eingeben: ");
		System.out.print("a: ");
		a = input.nextInt();
		System.out.print("b: ");
		b = input.nextInt();
		System.out.print("c: ");
		c = input.nextInt();
		
		double x1, x2;
		double nenner = 2*a;
		double reslin = c/b;
		double diskriminante = b*b-4.0*a*c;
		double resmidnight1 = (-b+Math.sqrt(diskriminante))/(nenner);
		double resmidnight2 = (-b-Math.sqrt(diskriminante))/(nenner);
		double resmidnight3 = -b/nenner;
		
		if (a == 0.0) {
			if (b == 0.0 && c == 0.0){
				System.out.println("Es gibt unendlich viele Nullstellen");
			}
			else if (b == 0.0) {
				System.out.println("Es gibt keine Nullstellen");
			}
			else {
				System.out.println("Es gibt genau eine Nullstelle bei x = " +reslin);
			}
		}
		else if (diskriminante == 0){
			System.out.println("Eine Nullstelle bei x = " +resmidnight3);
		}
		else if (diskriminante < 0){
			System.out.println("Keine Nullstelle!");
		}
		else {
			x1 = resmidnight1;
			x2 = resmidnight2;
			System.out.println("X1 = " + x1);
			System.out.println("X2 = " + x2);
		}
	}
}

Scheint wunderbar zu funktionieren :)
 

Landei

Top Contributor
Wenn du a, b, c schon als double definierst, warum läßt du dann nicht auch mit input.nextDouble();
doubles einlesen?

Außerdem hast du den Fall a=b=c=0 vergessen, das sind dann unendlich viele Nullstellen :p
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Seit ich denselben Fehler gemacht habe schreibe ich sogar um Einzelstatements {}
Java:
if (xxx) {
   y();
} else {
   z();
}

Ach ja - solltest du später mit switch - case experimentieren - Nie das "break" vergessen! :D

Java:
  public void setDimensions(int pDimensionID) {
    switch (pDimensionID) {
      case MILLIMETER:
      case CENTIMETER:
      case METER:
        mDimension = pDimensionID;
        mDimensionsEnabled = false;
        break;  // <--- Das da ist wichtig, sonst wird der Code im default auch ausgeführt 
        
      default:
        //the default measure is millimeter (factor = 1)
        mDimension = MILLIMETER;
        break; // <-- Das da ist eigentlich überflüssig
    }
  }


Dein Code wird wie folgt ausgeführt:


Java:
import java.util.Scanner;
public class Aufgabe1 {
	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		
		double a, b, c;
		double x1, x2;
			
		System.out.println("Bitte Werte eingeben: ");
		System.out.print("a: ");
		a = input.nextInt();
		System.out.print("b: ");
		b = input.nextInt();
		System.out.print("c: ");
		c = input.nextInt();
		
		x1 = -c/b;		
		if (a == 0.0)
			System.out.println("Eine Nullstelle bei: " +x1);
		else if (Math.sqrt(b*b+4.0*a*c) < 0.0)
			System.out.println("Keine Nullstellen!");
		else
			x1 = (-b+Math.sqrt(b*b+4.0*a*c))/(2.0*a);
		x2 = (-b-Math.sqrt(b*b+4.0*a*c))/(2.0*a);
		System.out.println("X1 = " +x1);
		System.out.println("X2 = " +x2);
		}
	}
 
Zuletzt bearbeitet:

Lybrial

Bekanntes Mitglied
Wenn du a, b, c schon als double definierst, warum läßt du dann nicht auch mit input.nextDouble();
doubles einlesen?

Außerdem hast du den Fall a=b=c=0 vergessen, das sind dann unendlich viele Nullstellen :p

Mit nextDouble(); haste natürlich recht, aber den Fall mit unendlich vielen Nullstellen hab ich nicht vergessen :p
Guck nochmal nach^^
 

Lybrial

Bekanntes Mitglied
Hi!

Ohne den Code jetzt angesehen zu haben:

sämtliche fliesskommazahlen sollten eigentlich nicht direkt mit "==" geprüft werden, sonder immer mit einer fehlerschranke verglichen werden (es seidenn es ist wirklich gewünscht, daß die bedingung nur bei einer ganze zahl ausgeführt wird).

Bsp: if (float x == 2.0) ..... funktioniert nur bei exakt 2.0 (bei komplizierten berechnunge unwahrscheinlich)

sollte dies aber auch bei 2.000000001 geschehen muss man eine fehlerschranke definieren und dann mit dieser vergleichen!

vielleicht hilfts

LG

Deinem Gedanken kann ich folgen, allerdings weiß ich nicht was eine Fehlerschranke ist.
 

Lybrial

Bekanntes Mitglied
Jetzt hat mein Prof mir gerade gesagt:
"Wenn ich nochmal sehe, dass sie double Variablen vergleichen, dann pack ich ihren Laptop
und schlag ihn ihnen um die ohren"

^^

hmmmmm....
wie mach ich es denn sonst?

Er meinte mit unseren derzeitigen möglichkeiten, (das ist all das, das oben im Programm enthalten ist ;))
müssen wir das hinbekommen....entweder ich steh aufm schlauch oder ich bin zu doof oder er hat
gelogen^^
 

Lybrial

Bekanntes Mitglied
Hab das jetzt mal so gemacht, was haltet ihr davon?

Java:
import java.util.Scanner;
public class Aufgabe1 {
	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		
		double a, b, c;
		
		System.out.println("Bitte Werte eingeben: ");
		System.out.print("a: ");
		a = input.nextDouble();
		System.out.print("b: ");
		b = input.nextDouble();
		System.out.print("c: ");
		c = input.nextDouble();
		
		double x1, x2;
		double nenner = 2*a;
		double reslin = c/b;
		double diskriminante = b*b-4.0*a*c;
		double resmidnight1 = (-b+Math.sqrt(diskriminante))/(nenner);
		double resmidnight2 = (-b-Math.sqrt(diskriminante))/(nenner);
		double resmidnight3 = -b/nenner;
		
		if (Math.abs(a) < 1e-10) 
		{
			if (Math.abs(b) < 1e-10 && Math.abs(c) < 1e-10)
			{
				System.out.println("Es gibt unendlich viele Nullstellen");
			}
			else if (Math.abs(b) < 1e-10) 
			{
				System.out.println("Es gibt keine Nullstellen");
			}
			else 
			{
				System.out.println("Es gibt genau eine Nullstelle bei x = " +reslin);
			}
		}
		else if (Math.abs(diskriminante) < 1e-10)
		{
			System.out.println("Eine Nullstelle bei x = " +resmidnight3);
		}
		else if (diskriminante < 0)
		{
			System.out.println("Keine Nullstelle!");
		}
		else 
		{
			x1 = resmidnight1;
			x2 = resmidnight2;
			System.out.println("X1 = " + x1);
			System.out.println("X2 = " + x2);
		}
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
W Verschachtelte If-else --> finde meinen Fehler nicht Java Basics - Anfänger-Themen 30
M Else wird nicht ausgeführt. Java Basics - Anfänger-Themen 5
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
P [ANFÄNGER] if else funktioniert nicht Java Basics - Anfänger-Themen 4
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7
M if then else geht nicht Java Basics - Anfänger-Themen 10
M Problem mit der For Schleife (else funzt nicht richtig) Java Basics - Anfänger-Themen 10
H if else. else nimmt er nicht Java Basics - Anfänger-Themen 7
N "if ... else" geht nicht Java Basics - Anfänger-Themen 7
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
I If / Else in Setter? Java Basics - Anfänger-Themen 8
M If-Else Java Basics - Anfänger-Themen 5
laxla123 Verschachtelte If-Else Schleife Java Basics - Anfänger-Themen 21
laxla123 If-else Java Java Basics - Anfänger-Themen 4
luggas89 If else auch mit unterschiedlichen Antworten Java Basics - Anfänger-Themen 5
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
pumpgun99 Fehler Meldung "else without if" Java Basics - Anfänger-Themen 3
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Übung Else if Java Basics - Anfänger-Themen 2
L If und else bei 2 Dimensionalen Arrays Java Basics - Anfänger-Themen 8
F if else if anfängerfrage Java Basics - Anfänger-Themen 22
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
T "Einkauf" & if else Struktur Java Basics - Anfänger-Themen 7
steven789hjk543 Input mit if-else Java Basics - Anfänger-Themen 23
H ERGÄNZUNGSFRAGE: Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 2
A break; mit Einfluss hinter else if Block Java Basics - Anfänger-Themen 3
R else without if error Java Basics - Anfänger-Themen 5
F Methoden Verschachtelte if else Methode Java Basics - Anfänger-Themen 10
M Java Taschenrechner (if-else) Java Basics - Anfänger-Themen 11
C Variablen 'else' without 'if' Java Basics - Anfänger-Themen 4
F If - Else Java Basics - Anfänger-Themen 3
F Variablen If else: Einer Variable einen Wert hinzufügen oder so? Java Basics - Anfänger-Themen 6
I if/else Statements Java Anfänger Java Basics - Anfänger-Themen 14
M jOptionPane mit if else Java Basics - Anfänger-Themen 16
K Frage zu If & else if Java Basics - Anfänger-Themen 5
R else if anweisungen Java Basics - Anfänger-Themen 2
Y Problem mit If-Else Verzweigung! Java Basics - Anfänger-Themen 9
Hijo2006 If-else Java Basics - Anfänger-Themen 6
P Erste Schritte Taschenrechner mit if-else Anweisung Java Basics - Anfänger-Themen 6
T If/ Else If (zurückkehren) Java Basics - Anfänger-Themen 4
O Grosse If / Else verschachtelung übersichlitcher gestlten Java Basics - Anfänger-Themen 6
S Erste Schritte Unterschied "if" und "else if" Java Basics - Anfänger-Themen 27
M If in einem else Java Basics - Anfänger-Themen 14
A boolean Methode ohne If und else Java Basics - Anfänger-Themen 1
J Mehrere IF Anweisungen und dazugehörige ELSE Java Basics - Anfänger-Themen 6
C else in if umschreiben Java Basics - Anfänger-Themen 2
J Fehlermeldung else without if Java Basics - Anfänger-Themen 5
P Compiler-Fehler wieso zeigt der compiler ein else without if? Java Basics - Anfänger-Themen 3
E If...else... Java Basics - Anfänger-Themen 7
G Mehrere If-else-Sätze der Reihe nach durchlaufen lassen Java Basics - Anfänger-Themen 2
C If Else Frage Java Basics - Anfänger-Themen 2
M if, else Anweisung Java Basics - Anfänger-Themen 3
J Ergebnis wird gespammt sowie eine else if Frage Java Basics - Anfänger-Themen 2
A instanceof-if-else-Anweisungen eleganter lösen Java Basics - Anfänger-Themen 5
O if and else geht nur manchmal Java Basics - Anfänger-Themen 17
V Operatoren Java if-else argument Java Basics - Anfänger-Themen 4
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
T If, else Problem Java Basics - Anfänger-Themen 12
C IF-Else Verknüpfungen Java Basics - Anfänger-Themen 10
Uzi21 if - else Abfrage Java Basics - Anfänger-Themen 6
T Problem im If-Else-Statement Java Basics - Anfänger-Themen 4
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
N Best Practice Stilistische Anwendung von if/else-Abfragen Java Basics - Anfänger-Themen 7
L else without if Fehler Java Basics - Anfänger-Themen 14
F try/catch - (else) Java Basics - Anfänger-Themen 11
H Worauf bezieht sich die erste else-Anweisung Java Basics - Anfänger-Themen 9
S if und else problem... Java Basics - Anfänger-Themen 13
Q if-else Logikproblem Java Basics - Anfänger-Themen 4
M Probleme mit else if Java Basics - Anfänger-Themen 15
M Erste Schritte Break-Anweisung bei if-else Java Basics - Anfänger-Themen 6
B OOP If und else in Main class einbinden Java Basics - Anfänger-Themen 9
T Erste Schritte switch case Anweisung und if else Verzweigungen? Java Basics - Anfänger-Themen 6
K Bedingungen else Java Basics - Anfänger-Themen 7
B if-else in einer schleife Java Basics - Anfänger-Themen 14
J Erste Schritte If-Else Idee gesucht Java Basics - Anfänger-Themen 6
T if else Java Basics - Anfänger-Themen 8
R boolean, if-else Java Basics - Anfänger-Themen 7
P int-Wertevergleich mit if-else-Verzweigung Java Basics - Anfänger-Themen 3
P If-else-Verzweigung Java Basics - Anfänger-Themen 9
E Compiler-Fehler Fehler: else without if Java Basics - Anfänger-Themen 11
D Java Einsteiger (boolean, if-else etc.) Java Basics - Anfänger-Themen 7
I Methoden Problem If/Else; Public Void Java Basics - Anfänger-Themen 6
P Anzahl der else if Operatoren begrenzt?? Java Basics - Anfänger-Themen 7
K Mal wieder ein Problem mit If / Else Java Basics - Anfänger-Themen 10
K Anfänger If / Else Problem Java Basics - Anfänger-Themen 5
C if else Abfrage Java Basics - Anfänger-Themen 11
T Umschreiben von switch in if else und umgekehrt Java Basics - Anfänger-Themen 9
C Schleifen, if, else......? Java Basics - Anfänger-Themen 8
2 if und else Java Basics - Anfänger-Themen 9
E Verschachtelte If-Anweisungen - "else without if" Java Basics - Anfänger-Themen 4
S Brauche Hilfe bei if/else Java Basics - Anfänger-Themen 3
S if-else Java Basics - Anfänger-Themen 22
A ein if else problem Java Basics - Anfänger-Themen 13
N If-else-If Leiter Java Basics - Anfänger-Themen 9
U Dringend: Syntax error on token "else" Java Basics - Anfänger-Themen 8
L if else anweisung Java Basics - Anfänger-Themen 2
M If/Else mit Zahlenfolge Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben