Wie kann ich den Fehler bei "If .... else"..." loswerden ?

Hier ein Teil von dem Fehler - (Informatik, Java, Eclipse)

6 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Das Semikolon muss weg und ein else (ohne weiteres if) nimmt keine Bedingung.

if (condition) {
   expression;
} else if (condition) {
   expression;
} else {
   expression;
}

Außerdem musst Du Deine Variable außerhalb der Abfragen deklarieren, also ...

int loesung = 0;

if (condition) {
   loesung = 1;
} else {
   loesung = 2;
}

Variablen, die in einem Block deklariert werden, werden nämlich verworfen, sobald der Block verlassen wird.

Um Strings auf Gleichheit zu prüfen, solltest Du außerdem die Methode String.equals(String s) verwenden.

Also nicht ...

String s = "Hallo";

if (s == "Hallo") {
   doSomething();
}

... sondern ...

String s = "Hallo";

if (s.equals("Hallo")) {
   doSomething();
}

String ist nämlich ein Referenztyp und der == Operator prüft bei Referenztypen, ob die Speicheradressen, auf die sie zeigen, identisch sind, also ob die Strings an der selben Adresse im Speicher gespeichert sind.

Um auf inhaltliche Gleichheit zu prüfen, musst Du die .equals(...)-Methode der Klasse String aufrufen.


KznPctrs 
Beitragsersteller
 04.04.2017, 21:29

Kannst du mir das mit dem deklarieren nochmal ein wenig besser erklären ? denn ich glaube dass dort nun der nächste Fehler ist.

1
xxxcyberxxx  04.04.2017, 22:02
@KznPctrs

Deklarieren heißt einfach, dass man eine Variable "festlegt", ihr also einen Namen gibt und sagt, welchen Typ sie annehmen soll.

int n;

Meistens wird sie auch noch im gleichen Zug initialisiert:

int n = 0;

//ist das gleiche wie
int n;
n = 0;
2
NoHumanBeing  04.04.2017, 22:02
@KznPctrs

Variablen "leben" immer in dem Block, in dem sie deklariert worden sind und in untergeordneten Blöcken.

(Variable deklarieren = einer Variablen einen Namen und Datentyp zuweisen.)

Wenn Du eine Variable innerhalb einer If-Verzweigung (oder Schleife oder Methode) deklarierst, dann existiert diese Variable nur, bis die Verzweigung (oder Schleife oder Methode) verlassen wird. Danach ist die Variable sozusagen "weg" (auch wenn sie häufig tatsächlich noch auf dem Stack liegen bleibt, aber auf sie kann nicht mehr zugegriffen werden - der Compiler "kennt sie nicht mehr", nachdem der Block verlassen wurde).

Wenn Du einer Variablen innerhalb einer Verzweigung einen Wert zuweisen und diesen außerhalb der Verzweigung auslesen möchtest, musst Du die Variable daher vor der Verzweigung deklarieren. Hinter der Verzweigung geht nicht, weil sie ja bereits existieren muss, wenn die Verzweigung betreten wird und innerhalb der Verzweigung geht auch nicht, weil die Variable dann nicht mehr existieren würde, sobald die Verzweigung verlassen wird. Du möchtest sie aber außerhalb der Verzweigung auslesen, also muss sie dann noch existieren, also darfst Du sie nicht in der Verzweigung deklarieren.

0

Hinter else...if darf kein Semikolon. Die Variable "lösung" muss vor dem if-else-Konstrukt angelegt werden und der Umlaut in dem Variablennamen könnte auch problematisch werden. Und ganz am Ende muss "else if" anstatt "else" hin. Ein echter "else"-Zweig (so dass eine Meldung kommt, wenn man nicht +,-,* oder / eingibt, wäre auch noch schön.

Außerdem muss ein richtiger Rechner auch Divisionen durch Null abfangen. ;)


KznPctrs 
Beitragsersteller
 04.04.2017, 21:04

Ja das stimmt.

Aber wie gesagt habe ich erst Gestern damit angefangen mich damit auseinander zu setzen und wollte erstmal nur mit den Grundlagen zurechtkommen.

1

Kleiner Hinweis: Gewöhn dir schonmal den Java Styleguide an:

http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

So werden Variablen immer klein begonnen und die Klammerung ist anders:

http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-142311.html#449

Dann:

-die zweite else if wird nicht erkannt, weil hinter der ersten else if ein Semikolon ist. Dies beendet den aktuellen Befehl und die nachfolgenden else haben keine Ausgangsbedingung mehr, durch die sie eintreffen könnten.

-Man vergleicht in Java keine Strings mit ==. String ist kein primitiver Datentyp und durch == wird hier nicht geprüft, ob der Inhalt gleich ist. Du müsstest das durch if(z.equals("+")) usw lösen.

- Du solltest keine Umlaute (wie das ö) nutzen.

- Du erstellst in jedem if-Block eine lokale Integer-Variable "Lösung". Die ist aber nur innerhalb dieses if-Blocks sichtbar. Um das Ergebnis am Ende nutzen zu können, müsstest du die Variable schon davor deklarieren (ihr also einen Datentyp und den Namen zuweisen), mit einem Wert (z.B. 0) initialisieren und dann im if-Block verändern.

Beispiel:

int loesung = 0;

if(z.equals("+")){
loesung = zahl1 + zahl2;
}
if(z.equals("-")){
loesung = zahl1 - zahl2;
}
if(z.equals("*")){
loesung = zahl1 * zahl2;
}
if(z.equals("/")){
loesung = zahl1 / zahl2;
}

System.out.println(loesung);

Variablennamen deklariert man für gewöhnlich mit Kleinbuchstaben, ebenso bitte auf Umlaute verzichten. Strings auch nicht mittels "==" vergleichen. Ein weiteres Problem ist, dass du einem einzelnen "else" eine Bedingung anschließt, das ist nicht erlaubt. Dazu niemals ein Semikolon hinter if, else, try, catch etc setzen:

int loesung;
if (z.equals("+"))
loesung = zahl1 + zahl2;
else if (z.equals("-"))
loesung = zahl1 - zahl2;
else if (z.equals("/"))
loesung = zahl1 / zahl2;
else if (z.equals("*"))
loesung = zahl1 * zahl2;

Am Ende von if und else if gehört hinter der ) kein Semikolon.

Woher ich das weiß:Studium / Ausbildung – Fachinformatiker - Anwendungsentwicklung