Java 为什么我的if链没有停止?
今天我和我的学生一起运行了一个程序,我们找到了一个方法,要求他们创建条件语句,在输入1-7(对应于星期日到星期六)后,在星期几提示用户 一个学生想出了下面的代码,它打印出“星期四”,但它也打印出else语句。我不明白为什么它不停在d==5。但是当我改变方法以返回一个字符串,并让每个if语句返回一个类似“Sunday”的字符串时,它工作了。代码如下。为什么程序不是因为void方法而停止,而是因为String方法而停止Java 为什么我的if链没有停止?,java,conditional,Java,Conditional,今天我和我的学生一起运行了一个程序,我们找到了一个方法,要求他们创建条件语句,在输入1-7(对应于星期日到星期六)后,在星期几提示用户 一个学生想出了下面的代码,它打印出“星期四”,但它也打印出else语句。我不明白为什么它不停在d==5。但是当我改变方法以返回一个字符串,并让每个if语句返回一个类似“Sunday”的字符串时,它工作了。代码如下。为什么程序不是因为void方法而停止,而是因为String方法而停止 public static void dayOfWeek(int d) //Th
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";
}
}
关键是当在连续条件句中使用时,
else if
和if
之间存在差异。在你的情况下
if (a) { .. }
if (b) { .. }
else { .. }
if(a)
条件与if(b)
没有任何关系。这两个条件都是独立评估的,它们的主体也会相应地执行。因此,else
条件仅附加到第二个条件,并且将在b
为false
时执行,而不管之前执行了什么
在任何情况下,对于这种情况,您最好使用字符串[]
,例如:
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!");
}
private static final String[]days={“星期日”、“星期一”…};
公共静态字符串dayOfWeek(int d){
如果(d>=1&&d为什么要这样做?为什么你认为else
也属于另一个if
s,而不仅仅是最后一个?在这种情况下没有“if链”。你有一堆连续但独立的if,最后还有if和else,它们都属于最后一个if。因此,第一个if运行,无所谓r发生了什么第二个运行,不管发生什么第三个运行,依此类推,直到最后一个运行,它有一个else和一个不匹配的条件,因此您可以看到else的输出。第二个示例只起作用是因为return
语句,而不是因为返回String
的方法eelse
块仅与最后一个if
语句关联。您可能想到的构造是if{…}else if{…}否则
等。但这不是您拥有的。通过检查天.长度
,当它不可避免地被修改为返回10天法国共和国日历周的天时,这将起作用。