Ich habe heute ein Programm mit meinen Schülern ausgeführt und wir kamen zu einer Methode, die sie aufforderte, bedingte Anweisungen zu erstellen, die den Benutzer am Wochentag nach einer Eingabe von 1 - 7, die Sonntag bis Samstag entsprechen, anruft.Warum hört meine Wenn-Kette nicht auf?
Ein Student kam mit dem unten stehenden Code, der "Donnerstag" druckt, aber es druckt auch die Else-Anweisung aus. Ich kann nicht herausfinden, warum es bei d == nicht aufhört. 5. Aber als ich die Methode änderte, um einen String zurückzugeben, und jede if-Anweisung einen String wie "Sunday" zurückgab, funktionierte es. Der Code ist unten. Warum stoppt das Programm nicht für die Void-Methode, sondern für die String-Methode?
public static void dayOfWeek(int d) //This did not stop at d == 5.
{
if (d == 1)
{
System.out.println("Sunday");
}
if (d == 2)
{
System.out.println("Monday");
}
if (d == 3)
{
System.out.println("Tuesday");
}
if (d == 4)
{
System.out.println("Wednesday");
}
if (d == 5)
{
System.out.println("Thursday");
}
if (d == 6)
{
System.out.println("Friday");
}
if (d == 7)
{
System.out.println("Saturday");
}
else
{
System.out.println("Oops! Number must be between 1 and 7");
}
}
public static String dayOfWeek(int d) //This worked at d == 5.
{
if (d == 1)
{
return "Sunday";
}
if (d == 2)
{
return "Monday";
}
if (d == 3)
{
return "Tuesday";
}
if (d == 4)
{
return "Wednesday";
}
if (d == 5)
{
return "Thursday";
}
if (d == 6)
{
return "Friday";
}
if (d == 7)
{
return "Saturday";
}
else
{
return "Oops! Number must be between 1 and 7";
}
}
Warum sollte es? Warum denkst du, dass "sonst" zu den anderen gehört, wenn auch nicht nur der letzte? – Tom
In diesem Fall gibt es keine 'if-Kette'. Sie haben eine Reihe aufeinanderfolgender, aber unabhängiger ifs und schließlich und wenn mit einem else, das allein zu diesem finalen gehört. Also, was passiert, ist das erste, wenn es ausgeführt wird, egal was passiert, der zweite wird ausgeführt, egal was passiert, der dritte wird ausgeführt, und so weiter bis zum letzten, der eine andere und eine nicht übereinstimmende Bedingung hat sehe die Ausgabe des else. – pvg
Das zweite Beispiel funktioniert nur wegen der 'return'-Anweisung, nicht weil die Methode' String' zurückgibt. aber wie @Tom gesagt hat, ist der 'else'-Block nur der letzten' if'-Anweisung zugeordnet. –