此代码从最小到最大对三个数字进行排序。 但是,我的else语句在第15、18、23、26和31行给了我4条错误。有人知道为什么会这样吗?
import java.util.*;
public class sortnumber {
public static void main (String[] args) {
Scanner scan = new Scanner (System.in);
int num1, num2, num3, random;
num1 = scan.nextInt();
num2 = scan.nextInt();
num3 = scan.nextInt();
random = 0;
if (num1 < num2 && num1 < num3)
System.out.print (num1);
if (num2 < num3)
System.out.print (num2);
System.out.print (num3);
else
System.out.print (num3);
System.out.print (num2);
else if (num2 < num1 && num2 < num3)
System.out.print (num2);
if (num1 < num3)
System.out.print (num1);
System.out.print (num3);
else
System.out.print (num3);
System.out.print (num1);
else if (num3 < num2 && num3 < num1)
System.out.print (num3);
if (num2 < num1)
System.out.print (num2);
System.out.print (num1);
else
System.out.print (num1);
System.out.print (num2);
}
}
答案 0 :(得分:3)
由于您没有大括号,因此您的缩进是错误的。您实际编码的是:
random = 0;
if (num1 < num2 && num1 < num3)
System.out.print (num1);
if (num2 < num3)
System.out.print (num2);
System.out.print (num3);
else // <===== ERROR
System.out.print (num3);
System.out.print (num2);
else if (num2 < num1 && num2 < num3) // <===== ERROR
System.out.print (num2);
if (num1 < num3)
System.out.print (num1);
System.out.print (num3);
else // <===== ERROR
System.out.print (num3);
System.out.print (num1);
else if (num3 < num2 && num3 < num1) // <===== ERROR
System.out.print (num3);
if (num2 < num1)
System.out.print (num2);
System.out.print (num1);
else // <===== ERROR
System.out.print (num1);
System.out.print (num2);
如果添加缩进指示的花括号,则会得到以下信息:
random = 0;
if (num1 < num2 && num1 < num3) {
System.out.print(num1);
if (num2 < num3) {
System.out.print(num2);
System.out.print(num3);
} else {
System.out.print(num3);
System.out.print(num2);
}
} else if (num2 < num1 && num2 < num3) {
System.out.print(num2);
if (num1 < num3) {
System.out.print(num1);
System.out.print(num3);
} else {
System.out.print(num3);
System.out.print(num1);
}
} else if (num3 < num2 && num3 < num1) {
System.out.print(num3);
if (num2 < num1) {
System.out.print(num2);
System.out.print(num1);
} else {
System.out.print(num1);
System.out.print(num2);
}
}
为了防止发生此类错误,通常建议始终使用花括号。
答案 1 :(得分:1)
如果if / else if / else语句下的代码块超过一行,则需要大括号({,})。例如,您的第一个if语句完全有效。但是,错误仍在其余代码中。我建议几乎总是使用花括号,因为它通常会使您的代码更具可读性(即使if语句下只有一行)。
答案 2 :(得分:0)
您缺少花括号。
Java代码不关注换行符的开始位置或缩进量。而是使用行尾字符(分号)和花括号。
尽管Java支持无括号的if / else语句,但它们仅将一个语句与if
或else
关联。最好始终在要包含在条件语句中的代码周围包括花括号。
例如,采用您的第一个嵌套的if
语句:
if (num1 < num2 && num1 < num3) {
System.out.print (num1);
if (num2 < num3) {
System.out.print (num2);
System.out.print (num3);
}
else {
System.out.print (num3);
System.out.print (num2);
}
}
在此页面上查看一些旧的但有用的指针:http://www.fredosaurus.com/notes-java/flow/if/30if-braces.html