我知道这不会编译并在此时运行。切换声明是对的吗?我确实得到了编译器错误:class,interface或enum expected
public class Fruit
{
public static void main(String[] args)
{
String choice = " ";
switch(choice)
{
case " A ": System.out.print(" Apple");
break;
case " K ": System.out.println("Kiwi");
break;
case " P ": System.out.println("Pear");
break;
default: System.out.println("incorrect choice");
}
}
}
答案 0 :(得分:5)
您收到错误是因为您必须尝试将switch
与String
一起使用且Java版本低于7. String
在Java中引入switch
语句的支持因此,您需要使用相同版本或更高版本来编译代码。
按照此技术说明了解有关使用String的切换的更多信息:
http://docs.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html
答案 1 :(得分:0)
交换机语句中的字符串
在JDK 7发行版中,您可以在String
语句的表达式中使用switch
对象。
switch
语句将其表达式中的String对象与每个案例标签关联的表达式进行比较,就好像它使用String.equals
方法一样;因此,switch语句中String对象的比较区分大小写。 Java编译器通常使用switch
语句从String
语句生成比从链式if-then-else
语句更高效的字节码。
答案 2 :(得分:0)
如上所述,只能使用Java 7或更高版本将字符串用作case语句的表达式。如果您只能使用较低版本,那么这里是您的代码的解决方法。
字母表有数字表示。也就是说,CHARACTERS有固定的数字代码 - http://www.kerryr.net/pioneers/ascii2.htm
您将获得一个String,获取字符串中的第一个char,然后将该char转换为其int代码。
在旧式开关中使用int代码而不是String选项。
public class Fruit {
public static void main(String[] args) {
String choice = "";
int code = -1;
choice = "K";
code = (int) choice.charAt(0);
switch (code) {
case 65://A
System.out.print("Apple");
break;
case 75://K
System.out.println("Kiwi");
break;
case 80://P
System.out.println("Pear");
break;
default:
System.out.println("incorrect choice");
}
}
}