Java 为什么这个交换机案例在Netbeans中不起作用?
开关案例正在取值,但只有默认案例正在运行Java 为什么这个交换机案例在Netbeans中不起作用?,java,switch-statement,Java,Switch Statement,开关案例正在取值,但只有默认案例正在运行 int z = Integer.parseInt(x); JOptionPane.showMessageDialog(null,+z); switch (z) { case ('1'): C.SetEmpInformation(); break; case ('2'): C.UpdateEmpInformation(); break; default:
int z = Integer.parseInt(x);
JOptionPane.showMessageDialog(null,+z);
switch (z) {
case ('1'):
C.SetEmpInformation();
break;
case ('2'):
C.UpdateEmpInformation();
break;
default:
JOptionPane.showMessageDialog(null, "Invalid Identity");
}
删除case语句中的单引号。它们将匹配为
char
,而不是int
1'是一个字符
,与数字1非常不同
switch (z) {
case 1: /* .... */
case 2: /* .... */
default : /* .... */
}
您也不需要括号。删除case语句中的单引号。它们将匹配为
char
,而不是int
1'是一个字符
,与数字1非常不同
switch (z) {
case 1: /* .... */
case 2: /* .... */
default : /* .... */
}
您也不需要括号。您在
case
语句中检查的类型错误,您将int
(z
)与字符('1'
)进行比较
您需要这样编写您的案例
s:
JOptionPane.showMessageDialog(null, + z); // btw, what is this + doing here?
switch (z) {
case 1:
C.SetEmpInformation();
break;
case 2:
C.UpdateEmpInformation();
break;
default:
JOptionPane.showMessageDialog(null, "Invalid Identity");
break;
}
您在case
语句中检查的类型错误,您将int
(z
)与char
('1'
)进行比较
您需要这样编写您的案例
s:
JOptionPane.showMessageDialog(null, + z); // btw, what is this + doing here?
switch (z) {
case 1:
C.SetEmpInformation();
break;
case 2:
C.UpdateEmpInformation();
break;
default:
JOptionPane.showMessageDialog(null, "Invalid Identity");
break;
}
它在NetBeans中也适用于我,所以如果它甚至不能在您的机器上启动,您可能会有一些验证工具linter之类的工具。
不管怎么说,您编写的是正确的Java代码,只是它可能不会达到您的预期,而这正是消息所表明的。
您可以切换
数字、字符和字符串,它们都可以工作。不要把它们混在一起:它们要么不会编译(将数字/字符与字符串混在一起),要么会以一种可能意想不到的方式工作(将数字与字符混在一起),因为1
是一个数字,而'1'
是一个字符,它由ASCII码表示为一个数字,49
测试代码:
String x="1";
int z=Integer.parseInt(x);
switch(z){
case ('1'): System.out.println(z+" is '1'");break;
default: System.out.println(z+" is not '1'");
}
x="49";
z=Integer.parseInt(x);
switch(z){
case ('1'): System.out.println(z+" is '1'");break;
default: System.out.println(z+" is not '1'");
}
x="1";
z=Integer.parseInt(x);
switch(z){
case 1: System.out.println(z+" is 1");break;
default: System.out.println(z+" is not 1");
}
switch(x.charAt(0)){
case '1': System.out.println("\"1\".charAt(0) is '1'");break;
default: System.out.println("\"1\".charAt(0) is not '1'");
}
switch(x){
case "1": System.out.println("\""+x+"\" is \"1\"");break;
default: System.out.println("\""+x+"\" is not \"1\"");
}
输出:
它在NetBeans中也适用于我,所以如果它甚至不能在您的机器上启动,您可能会有一些验证工具linter之类的工具。
不管怎么说,您编写的是正确的Java代码,只是它可能不会达到您的预期,而这正是消息所表明的。
您可以切换
数字、字符和字符串,它们都可以工作。不要把它们混在一起:它们要么不会编译(将数字/字符与字符串混在一起),要么会以一种可能意想不到的方式工作(将数字与字符混在一起),因为1
是一个数字,而'1'
是一个字符,它由ASCII码表示为一个数字,49
测试代码:
String x="1";
int z=Integer.parseInt(x);
switch(z){
case ('1'): System.out.println(z+" is '1'");break;
default: System.out.println(z+" is not '1'");
}
x="49";
z=Integer.parseInt(x);
switch(z){
case ('1'): System.out.println(z+" is '1'");break;
default: System.out.println(z+" is not '1'");
}
x="1";
z=Integer.parseInt(x);
switch(z){
case 1: System.out.println(z+" is 1");break;
default: System.out.println(z+" is not 1");
}
switch(x.charAt(0)){
case '1': System.out.println("\"1\".charAt(0) is '1'");break;
default: System.out.println("\"1\".charAt(0) is not '1'");
}
switch(x){
case "1": System.out.println("\""+x+"\" is \"1\"");break;
default: System.out.println("\""+x+"\" is not \"1\"");
}
输出:
“1”是一个字符,而不是数字1。变量z
1
或49
中的值(字符1的ASCII值)?另外,从风格上看,案例标签中的括号看起来很奇怪,可能会让人感到困惑。请尝试case1:
和case2:
注意,您的示例在Eclipse上也不起作用。如果是这样的话,很可能代码是不同的。(这是基本Java…不是IDE差异。)“1”是字符,不是数字1。变量z
1
或49
中的值(字符1的ASCII值)?另外,从风格上看,案例标签中的括号看起来很奇怪,可能会让人感到困惑。请尝试case1:
和case2:
注意,您的示例在Eclipse上也不起作用。如果是这样的话,很可能代码是不同的。(这是基本的Java…不是IDE的区别。)非常感谢,它工作了,但是这个程序在Eclipse中运行得很好。为什么?从编译器的角度看,你没有写错误的代码,它似乎是有效的。问题是它没有按您希望的方式工作…非常感谢,它工作了,但是这个程序在Eclipse中运行得很愉快。为什么?从编译器的角度来看,您没有编写错误的代码,它似乎是有效的。问题是它没有按照你想要的方式工作。。。