else without if Fehler

Linn

Mitglied
Ich habe folgendes programm geschrieben:

Java:
class verzweigungSchaltjahr {

public static void main ( String [] args ) throws  Exeption {

BufferedReader eingabemaschine =
new BufferedReader ( new InputStreamReader ( System.in ) ) ;

    System.out.println ("Gebe ein beliebiges Jahr ein, dann kann ich dir sagen, ob es ein Schaltjahr ist!");
String strJahreszahl = eingabemaschine.readLine();

    if (jahreszahl % 4 == 0 ) {  
      if (jahreszahl % 100 == 0 ) {  
        if (jahreszahl % 400 == 0 ) {System.outprintln ("Dein ausgewähltes Jahr ist ein Schaltjahr!") ; }; } ; } ;
 else {system.out.println ("Dein eingegebenes Jahr ist kein Schaltjahr!") ; 

     } 
  }
Der Compiler gibt mir dann aber die Fehlermeldung: else without if und ich weiß echt nicht wo mein fehler liegt. Vielleicht bin ich ja zu blöd um ihn zu finden, aber ich habe es echt schon tausendmal gelesen, und weiß echt nicht, was der von mir will... Brauche dringend Hilfe!
P.S.: Das else was der Compiler meint habe ich mal unterstrichen!

Freu mich auf Antworten!🙂
 
Zuletzt bearbeitet von einem Moderator:
Aber egal, ob ich die Simikolons wegnehme oder nicht, die Fehlermeldung ist immer noch da...
Dann passt was mit der Klammerung nicht. Jeder Block braucht eine { und am Ende eine } Das else gehört ja wohl hinter alle drei ifs. Rüche Deinen Code richtig ein und Du wirst sehen, wo dir eine Klammer fehlt oder zu viel ist und warum das else an der Stelle falsch steht. Und darüber hinaus braucht man Bedinngungen, die alle eintreffen sollen, nicht mit verschachtelten ifs abzuprüfen hänge sie einfach mit && aneinander. Siehe nachfolgender Code (schön formatiert und coloriert, weil mit Java-Tags gepostet)
Java:
// Verknüpfung mit && ist äquivalent zu nacheinander prüfen mit verschachtelten ifs
// !Vorsicht ich habe die Bedingungen aus Deinem Code übernommen. Glaube aber nicht,
// dass sie korrekt sind, um ein Schaltjahr zu ermitteln
if (jahreszahl % 4 == 0 && jahreszahl % 100 == 0 && jahreszahl % 400 == 0) {
  System.out.println ("Dein ausgewähltes Jahr ist ein Schaltjahr!") ;
}
else {
 System.out.println ("Dein eingegebenes Jahr ist kein Schaltjahr!") ;
}
Wobei, wenn ich mir das anschaue, die von Dir gewählte Bedingungskombination nicht taugt, um ein Schaltjahr zu finden. Da denke noch mal genauer nach.
 
Zuletzt bearbeitet von einem Moderator:
Okay, also das program sieht jetzt so aus:

Java:
class verzweigungSchaltjahr {
  
  public static void main ( String [] args ) throws  Exeption {
    
    BufferedReader eingabemaschine =
    new BufferedReader ( new InputStreamReader ( System.in ) ) ;
    
    System.out.println ("Gebe ein beliebiges Jahr ein, dann kann ich dir sagen, ob es ein Schaltjahr ist!");
    String strJahreszahl = eingabemaschine.readLine();
    
    if (jahreszahl % 4 == 0 && jahreszahl % 100 == 0 && jahreszahl % 400 == 0) {
      System.out.println ("Dein ausgewähltes Jahr ist ein Schaltjahr!") ;}      ;
    else {System.out.println ("Dein eingegebenes Jahr ist kein Schaltjahr!");} ;
  } 
}

Aber die Fehlermeldung ist immer noch da, nur die, mit Simikolons und so hat er kein problem nur mit dem else...

Aber danke schon mal für eure Antworten, jetzt ist das program wenigstens schon mal übersichtlicher! 😀
 
Mäuschen, schau Dir mal gaaaaaaanz laaaaange die Zeilen 12 und 13 an.
 
Zuletzt bearbeitet von einem Moderator:
Okay, also ich seh das nichts... vielleicht meinst du das ; zwischen der ) und der }? Der Compiler sagt aber, dass die da hin müssen...???:L
 
OMG! Okay, habs weg gemacht, jetzt gehts auch, also zumindestens macht er das was er machen soll, muss nur noch gucken, ob das ergebniss, was er mir sagt auch wirklich richtig ist! Vielen Vielen Dank! Habt mir echt mega geholfen, besonders du nillehammer! Danke! Und sorry, für meine Dummheit...:bloed:
 
Nein ist es nicht, da die regeln fuer die Berechnung eines Schaltjahres falsch sind.

Die 1 Regel lautet jedes Jahr % 4 = 0 ist ein Schaltjahr. Okay das waere einfach.

Nun gibt es aber die ausnahmen. 2 Regel Jedes Jahr % 100 = 0 ist kein Schaltjahr, obwohl es eigentlich nach der ersten Regel ein Schaltjahr waere.

und von dieser Regel gibt es wieder eine Ausnahme. 3 Regel: jedes Jahr % 400 = 0 ist wieder ein Schaltjahr.
 
Ich habe mal nach den Schaltjahrregeln gesurft und dasa hier gefunden:

Die drei Schaltjahr-Regeln:
1 Ein Jahr ist ein Schaltjahr, wenn die Jahreszahl restlos durch 4 teilbar ist.
2 Ein Jahr ist kein Schaltjahr, wenn es durch 4 und 100 restlos teilbar ist.
3 Ein Jahr ist ein Schaltjahr, wenn es sowohl durch 4, durch 100 und durch 400 teilbar ist

Du hast wohl die dritte Regel im Kopf gehabt, denn die ist eins zu eins im Code abgebildet. Allerdings gehen Dir da einige durch die Lappen (siehe Regel 1). Außerdem ist die Frage, ob man die Bedingungen nicht evtl. geschickter prüfen kann, um alles zu erschlagen. Das läuft übrigens möglicherweise doch wieder auf verschachtelte ifs hinaus, sorry :bae:. Aber jetzt weißt Du ja, wie es geht.
 
Hi Linn, so:

Java:
    public static void main(String[] args) throws IOException {
        BufferedReader eingabemaschine = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Gebe ein beliebiges Jahr ein, dann kann ich dir sagen, ob es ein Schaltjahr ist!");
        String strJahreszahl = eingabemaschine.readLine();
        int jahreszahl = Integer.parseInt(strJahreszahl);

        if (jahreszahl % 4 == 0) {
            if (jahreszahl % 100 == 0) {
                if (jahreszahl % 400 == 0) {
                    System.out.println("Dein ausgewähltes Jahr ist ein Schaltjahr!");
                } else {
                    System.out.println("Dein eingegebenes Jahr ist kein Schaltjahr!");
                }
            } else {
                System.out.println("Dein eingegebenes Jahr ist kein Schaltjahr!");
            }
        } else {
            System.out.println("Dein eingegebenes Jahr ist kein Schaltjahr!");
        }
    }

so:

Java:
    public static void main(String[] args) throws IOException {
        BufferedReader eingabemaschine = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Gebe ein beliebiges Jahr ein, dann kann ich dir sagen, ob es ein Schaltjahr ist!");
        String strJahreszahl = eingabemaschine.readLine();
        int jahreszahl = Integer.parseInt(strJahreszahl);
        boolean scltjhr = true;

        if (jahreszahl % 4 == 0) {
            if (jahreszahl % 100 == 0) {
                if (jahreszahl % 400 == 0) {
                    System.out.println("Dein ausgewähltes Jahr ist ein Schaltjahr!");
                } else {
                    scltjhr = false;
                }
            } else {
                scltjhr = false;
            }
        } else {
            scltjhr = false;
        }

        if (scltjhr) {
            System.out.println("Dein eingegebenes Jahr ist kein Schaltjahr!");
        }
    }

oder so 🙂 :

Java:
    public static void main(String[] args) throws IOException {
        BufferedReader eingabemaschine = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Gebe ein beliebiges Jahr ein, dann kann ich dir sagen, ob es ein Schaltjahr ist!");
        String strJahreszahl = eingabemaschine.readLine();
        int jahreszahl = Integer.parseInt(strJahreszahl);
        boolean scltjhr = true;

        if (jahreszahl % 4 == 0 && jahreszahl % 100 == 0 && jahreszahl % 400 == 0) {
            System.out.println("Dein ausgewähltes Jahr ist ein Schaltjahr!");
        } else {
            System.out.println("Dein eingegebenes Jahr ist kein Schaltjahr!");
        }
    }

Die allergenausten Regeln habe ich mal Außerachtgelassen, denn das kann sehr schnell sehr komplex werden. 🙂

lg hütte
 
Zuletzt bearbeitet von einem Moderator:
hüteüberhüte schau dir deinen Code mal selbst nochmal genau an, er tut auch nicht das was er soll :/

Java:
  if ((jahreszahl % 4 == 0 && jahreszahl % 100 != 0) || jahreszahl % 400 == 0) {

So sollte es wohl eher funktionieren.
Zu erklärung in Textform:
WENN
Jahreszahl durch 4 Teilbar ist UND nicht durch 100 teilbar ist
ODER
Jahreszahl durch 400 Teilbar ist


Dann ist es ein Schaltjahr.

hüteüberhüte, wenn bei deinem 1. Code die jahreszahl durch 4 teilbar ist, aber NICHT durch 100 kommt er bei der 2. if in den else-Block, und es wird "kein Schaltjahr" ausgegeben.

bei deinem 2. Code das gleiche, nur dass scltjhr auf false gesetzt wird, wobei ich nichtmal weiß was das darstellt da du unten "kein Schaltjahr" ausgibst WENN scltjhr true ist.

Und bei deinem dritten code bekommst du nur true zurück wenn das Jahr durch 400 teilbar ist.
 
@TKaus: Daß es noch nicht das richtige Ergebnis berechnet, war mir bewusst, ich wollte nur den source von Linn ausführbar machen. 🙂
 

Zurück
Oben