If anweisungen zu verschachtelt? else without if

Status
Nicht offen für weitere Antworten.

Hückel

Mitglied
Hi, mein Compiler zeigt mir dauernd an der gleichen Stelle das ich ein else ohne if habe, ich verstehe aber einfach nicht wieso, habe die Klammern zig mal überprüft und für mich sieht das alles richtig aus, vieleicht hilft es ja was wenn jemand anders einen Blick drauf wirft? Hier der Quellcode:

Code:
public void EntscheidungsAbfrageSpieler()
  { if (Hubraum.isSelected())

         { Spielkarte Help1=Computer.getObersteKarte();
          int Hubraum1=Help1.getHubraum();
          Spielkarte Help2=Spieler.getObersteKarte();
          int Hubraum2=Help2.getHubraum();

           if (Hubraum1<Hubraum2)
            { SpielerSieg();
            }
            else
            { ComputerSieg();
            }
         }
           else if (Leistung.isSelected())

            {Spielkarte Help1=Computer.getObersteKarte();
             int Leistung1=Help1.getLeistung();
             Spielkarte Help2=Spieler.getObersteKarte();
             int Leistung2=Help2.getLeistung();

             if (Leistung1<Leistung2)
              {SpielerSieg();
              }
              else
              {ComputerSieg();
              }
            }

             else if (Tempo.isSelected());

              { Spielkarte Help1=Computer.getObersteKarte();
                int Tempo1=Help1.getTempo();
                Spielkarte Help2=Spieler.getObersteKarte();
                int Tempo2=Help2.getTempo();

                if (Tempo1<Tempo2)
                {SpielerSieg();
                }
                else
                {ComputerSieg();
                }
               }

                else if (NullHundert.isSelected())
                { Spielkarte Help1=Computer.getObersteKarte();
                  int NullHundert1=Help1.NullHundert();
                  Spielkarte Help2=Spieler.getObersteKarte();
                  int NullHundert2=Help2.getNullHundert();

                  if (NullHundert1<NullHundert2)
                  {SpielerSieg();
                  }
                  else
                  {ComputerSieg();
                  }
                 }


  }

Es kann doch eigentlich nicht sein, dass sich nicht mehr als 3 If anweisungen verschachteln lassen oder?
 

byte

Top Contributor
Also ausser eine katastrophale Formatierung fällt mir da auch nix auf. In welcher Zeile soll der Fehler denn sein?

Ich rate Dir aber mal, Dich mit den Code Conventions anzufreunden, dadurch vermeidest Du solche Fehler in Zukunft zum großen Teil.
 

robertpic71

Bekanntes Mitglied
Der Fehler liegt in der Zeile 32:

beim else if (Tempo.isSelected());

ist der Strichpunkt wegzulassen!!

Hier mal dein Code wie er (so ungefähr) sein sollte:

Code:
public void EntscheidungsAbfrageSpieler() {

    if (Hubraum.isSelected()) {
        Spielkarte Help1=Computer.getObersteKarte();
        int Hubraum1=Help1.getHubraum();
        Spielkarte Help2=Spieler.getObersteKarte();
        int Hubraum2=Help2.getHubraum();

        if (Hubraum1<Hubraum2) {
            SpielerSieg();
        } else {
            ComputerSieg();
        }

    } else if (Leistung.isSelected()) {
        Spielkarte Help1=Computer.getObersteKarte();
        int Leistung1=Help1.getLeistung();
        Spielkarte Help2=Spieler.getObersteKarte();
        int Leistung2=Help2.getLeistung();

        if (Leistung1<Leistung2) {
            SpielerSieg();
        } else {
            ComputerSieg();
        }

    } else if (Tempo.isSelected()) {
        Spielkarte Help1=Computer.getObersteKarte();
        int Tempo1=Help1.getTempo();
        Spielkarte Help2=Spieler.getObersteKarte();
        int Tempo2=Help2.getTempo();

        if (Tempo1<Tempo2) {
            SpielerSieg();
        } else {
            ComputerSieg();
        }

    } else if (NullHundert.isSelected()) {
        Spielkarte Help1=Computer.getObersteKarte();
        int NullHundert1=Help1.NullHundert();
        Spielkarte Help2=Spieler.getObersteKarte();
        int NullHundert2=Help2.getNullHundert();

        if (NullHundert1<NullHundert2) {
            SpielerSieg();
        } else {
            ComputerSieg();
        }
    }
}
 
B

Beni

Gast
Einmal übersichtlich formatieren...
Code:
public void EntscheidungsAbfrageSpieler(){
        if (Hubraum.isSelected()){
            Spielkarte Help1=Computer.getObersteKarte();
            int Hubraum1=Help1.getHubraum();
            Spielkarte Help2=Spieler.getObersteKarte();
            int Hubraum2=Help2.getHubraum();

            if (Hubraum1<Hubraum2){
                SpielerSieg();
            }
            else{
                ComputerSieg();
            }
        }
        else if (Leistung.isSelected()){
            Spielkarte Help1=Computer.getObersteKarte();
            int Leistung1=Help1.getLeistung();
            Spielkarte Help2=Spieler.getObersteKarte();
            int Leistung2=Help2.getLeistung();

            if (Leistung1<Leistung2){
                SpielerSieg();
            }
            else{
                ComputerSieg();
            }
        }
        
        else if (Tempo.isSelected());{
            Spielkarte Help1=Computer.getObersteKarte();
            int Tempo1=Help1.getTempo();
            Spielkarte Help2=Spieler.getObersteKarte();
            int Tempo2=Help2.getTempo();

            if (Tempo1<Tempo2){
                SpielerSieg();
            }
            else{
                ComputerSieg();
            }
        }

        else if (NullHundert.isSelected()){
            Spielkarte Help1=Computer.getObersteKarte();
            int NullHundert1=Help1.NullHundert();
            Spielkarte Help2=Spieler.getObersteKarte();
            int NullHundert2=Help2.getNullHundert();

            if (NullHundert1<NullHundert2){
                SpielerSieg();
            }
            else{
                ComputerSieg();
            }
        }
    }

... und der Fehler auf Zeile 29 sticht ziemlich deutlich ins Auge (da ist ein Zeichen zuviel...)

[Edit: och, jetzt war ich zu langsam]
 

robertpic71

Bekanntes Mitglied
Beni hat gesagt.:
Einmal übersichtlich formatieren...
[Edit: och, jetzt war ich zu langsam]

Ja dieser Code schrie förmlich nach Formatierung! Ich bin gerade in Übung, da ich gerade meine Java-Erstlingswerke etwas nachformatiert habe... :)

Schön langsam werde ich mich meinem Editor GEL trennen und einen 2. Anlauf mit Websphere machen, da gehen die Einrückungen und Klammern fast von selber. Aber als Anfänger war mir Eclipse mit 700 PlugIns (= Websphere) zuviel des Guten....

Robert P.
 

MPW

Top Contributor
robertpic71 hat gesagt.:
Beni hat gesagt.:
Einmal übersichtlich formatieren...
[Edit: och, jetzt war ich zu langsam]

Ja dieser Code schrie förmlich nach Formatierung! Ich bin gerade in Übung, da ich gerade meine Java-Erstlingswerke etwas nachformatiert habe... :)

Schön langsam werde ich mich meinem Editor GEL trennen und einen 2. Anlauf mit Websphere machen, da gehen die Einrückungen und Klammern fast von selber. Aber als Anfänger war mir Eclipse mit 700 PlugIns (= Websphere) zuviel des Guten....

Robert P.

Ich habe auch lange mit einem Editor programmiert, dass ist doch kein Grund die Formatierung ueber den Haufen zu schmeissen?
 

vah

Mitglied
Und wenn Du es ganz übersichtlich haben möchstest, dann setzt Du die jeweils korrespondierenden
Klammern senkrecht übereinander. Das entspricht zwar nicht den Sun-Konventionen und erhöht
die Zeilenzahl, macht aber den Quellcode deutlich lesbarer!




Code:
   public void EntscheidungsAbfrageSpieler()
   {
        if (Hubraum.isSelected())
        {
            Spielkarte Help1=Computer.getObersteKarte();
            int Hubraum1=Help1.getHubraum();
            Spielkarte Help2=Spieler.getObersteKarte();
            int Hubraum2=Help2.getHubraum();

            if (Hubraum1<Hubraum2)
            {
                SpielerSieg();
            }
            else
            {
                ComputerSieg();
            }
        }
        else if (Leistung.isSelected())
        {
            Spielkarte Help1=Computer.getObersteKarte();
            int Leistung1=Help1.getLeistung();
            Spielkarte Help2=Spieler.getObersteKarte();
            int Leistung2=Help2.getLeistung();

            if (Leistung1<Leistung2)
            {
                SpielerSieg();
            }
            else
            {
                ComputerSieg();
            }
        }
        else if (Tempo.isSelected()) 
        {
            Spielkarte Help1=Computer.getObersteKarte();
            int Tempo1=Help1.getTempo();
            Spielkarte Help2=Spieler.getObersteKarte();
            int Tempo2=Help2.getTempo();

            if (Tempo1<Tempo2)
            {
                SpielerSieg();
            }
            else
            {
                ComputerSieg();
            }
        }
        else if (NullHundert.isSelected())
        {
            Spielkarte Help1=Computer.getObersteKarte();
            int NullHundert1=Help1.NullHundert();
            Spielkarte Help2=Spieler.getObersteKarte();
            int NullHundert2=Help2.getNullHundert();

            if (NullHundert1<NullHundert2)
            {
                SpielerSieg();
            }
            else
            {
                ComputerSieg();
            }
        }
   }



vah
 

Sky

Top Contributor
Um das ganze noch übersichtlicher zu machen:

Code:
  public void EntscheidungsAbfrageSpieler() {
    Spielkarte Help1 = Computer.getObersteKarte();
    Spielkarte Help2 = Spieler.getObersteKarte();

    int value1;
    int value2;

    if (Hubraum.isSelected()) {
      value1 = Help1.getHubraum();
      value2 = Help2.getHubraum();
    } else if (Leistung.isSelected()) {
      value1 = Help1.getLeistung();
      value2 = Help2.getLeistung();
    } else if (Tempo.isSelected()) {
      value1 = Help1.getTempo();
      value2 = Help2.getTempo();
    } else if (NullHundert.isSelected()) {
      value1 = Help1.NullHundert();
      value2 = Help2.getNullHundert();
    }

    if (value1 < value2) {
      SpielerSieg();
    } else {
      ComputerSieg();
    }
  }

Alles was in allen if-Anweisungen gemacht wird, lässt sich m.E. auslagern: Also, Karten werden immer gezogen (vor den if's) und Auswertungen werden auch immer gemacht (nach den if's)

btw. gleiches Ergebnis mit 60% weniger Code ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J "unused"-Warnungen für import-Anweisungen unterdrücken Allgemeine Java-Themen 9
J Erklährung für Robot KeyEvent anweisungen Allgemeine Java-Themen 2
E Anweisungen, mitten in Klassen Allgemeine Java-Themen 4
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
ReinerCoder Case statt if else Abfragen?! Allgemeine Java-Themen 8
M Variablen If - Else Wiederholungsfehler Allgemeine Java-Themen 3
L Vererbung If-Else ersetzen durch was? Allgemeine Java-Themen 20
O Darstellung von else if anweisung im struktogramm? Allgemeine Java-Themen 1
R Wie schaffe ich es, dass java zB 100 zählt ohne ständig "else if" hinschreiben zu müssen? Allgemeine Java-Themen 7
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
K Eclipse Alternativkonstrukte (Verzweigungen: if, switch,else..) Allgemeine Java-Themen 4
D if - else Baum vereinfachen Allgemeine Java-Themen 4
S Else-Anweisung Problem Allgemeine Java-Themen 17
B Berechnung von Punkten/ If-else Strategie?! Allgemeine Java-Themen 51
M if - else Abfrage beenden Allgemeine Java-Themen 4
M if, else, etc. als Membervariablen? Allgemeine Java-Themen 14
P if(a) else if (b) else if (c) . Frage Allgemeine Java-Themen 2
G die mittlere von 5 Zahlen nur mit if und else finden Allgemeine Java-Themen 48
U Kompilieren einer großen Datei if-else = StackOverflowError Allgemeine Java-Themen 4
W kompliziertes Konstrukt von Schleifen/If/else. Rekursion? Allgemeine Java-Themen 22
G switch case VS. if.else if Allgemeine Java-Themen 2
H if - else if-else bessere Lösung gesucht Allgemeine Java-Themen 4
D Performancefrage zu "else if" und "||" Allgemeine Java-Themen 10
G if . else ? Allgemeine Java-Themen 36

Ähnliche Java Themen

Neue Themen


Oben