我今天和我的学生一起运行了一个程序,我们找到了一种方法,要求他们创建条件语句,在输入1-7对应于星期日到星期六之后提示用户在星期几。
一名学生想出了下面的代码,打印出"星期四",但它也打印出else语句。我无法弄清楚为什么它不会在d == 5停止。但是当我改变方法返回一个String并让每个if语句返回一个类似"星期日"有效。代码如下。为什么程序不会为void方法停止,而是停止String方法?
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";
}
}
答案 0 :(得分:0)
关键是在连续条件中使用else if
和if
之间存在差异。在您的情况
if (a) { .. }
if (b) { .. }
else { .. }
if (a)
条件与if (b)
无任何关系。这两个条件都是独立评估的,并且相应地执行它们因此,else
条件仅附加到第二个条件,并且在b
为false
时执行,无论之前执行了什么。
在任何情况下,你最好使用String[]
来解决这种情况,例如:
private static final String[] days = { "Sunday", "Monday" ... };
public static String dayOfWeek(int d) {
if (d >= 1 && d <= 7)
return days[d-1];
else
throw new IllegalArgumentException("Day of the week out of bounds!");
}