似乎无法在此switch语句中找到语法错误。非常感谢任何帮助。
源代码:
import java.util.Scanner;
public class SwitchCasing {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
try {
int number = Integer.parseInt(input);
switch(number) {
case 1:
if(number < 0) {
System.out.println("Number is smaller than 0.");
break;
}
case 2:
if(number > 0){
System.out.println("Number is greater than 0.");
break;
}
default:
System.out.println("Number is 0.");
}
} catch(IllegalArgumentException e) {
System.out.println("Please insert a valid number.");
}
sc.close();
}
}
无论输入什么值,输出始终为&#34;数字为0&#34;。 谢谢!
答案 0 :(得分:6)
这些案例标签不适合您的标签;它们用于Java来比较number
,因此它可以执行该案例。
如果case 1:
为number
,它将在1
的块处开始执行。由于1
不小于0
,因此该块不会产生任何输出。
如果case 2:
为number
,它将在2
的块处开始执行。由于1
不小于0
,因此该块将生成“数字大于0”的输出。
任何其他数字都将转到默认大小写并产生输出“Number is 0”,即使输出不正确。
您无法使用switch语句测试案例。将其更改为等效的if / else构造。
if(number < 0){
System.out.println("Number is smaller than 0.");
}
else if(number > 0){
System.out.println("Number is greater than 0.");
}
else {
System.out.println("Number is 0.");
}
答案 1 :(得分:0)
首先,你知道你可以做int number = sc.nextInt();
你不需要解析输入,它确保用户给你一个int。
至于你的开关盒你的休息;在if语句中,所以当代码读取它时会破坏包含它的循环。在你的情况下,它突破了if / else语句而不是switch case。
希望我能帮忙!
答案 2 :(得分:0)
case 1:
表示数字等于 1.但由于1不小于0,您将永远不会看到“数字小于0”,并且您不会破坏。 (break
位于if (number < 0)
部分内。)
case 2:
表示数字等于 2.如果输入2,您将输入此案例。
为你可能输入的所有其他值留下default
,我猜他们中的大多数都是。
在这种情况下你真的不想要switch
。您应该使用if-else
构造,如下所示:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
try{
int number = Integer.parseInt(input);
if(number < 0) {
System.out.println("Number is smaller than 0.");
} else if(number > 0) {
System.out.println("Number is greater than 0.");
} else {
System.out.println("Number is 0.");
}
} catch(IllegalArgumentException e) {
System.out.println("Please insert a valid number.");
} finally {
sc.close();
}
}