2012-09-20 31 views
6

我试图编译和我得到这个错误:交换机声明为不兼容的类型错误

enigma/Rotor.java:30: incompatible types found : java.lang.String required: int  switch(name){ 
1 error 

为什么会出现这个错误?我如何解决它?它在包中,我似乎无法弄清楚。下面的代码:

与字符串
String label; 

Rotor(){;} 

Rotor(String name){ 
    switch(name){ 
    case "B": 
     conversion_chart = B; 
     break; 
    case "C": 
     conversion_chart = C; 
     break; 
    case "I": 
     conversion_chart=I; 
     notch = NOTCH[0]; 
     break; 
    case "II": 
     conversion_chart=II; 
     notch = NOTCH[1]; 
     break; 
    case "III": 
     conversion_chart=III; 
     notch = NOTCH[2]; 
     break; 
    case "IV": 
     conversion_chart=IV; 
     notch = NOTCH[3]; 
     break; 
    case "V": 
     conversion_chart=V; 
     notch = NOTCH[4]; 
     break; 
    case "VI": 
     conversion_chart=VI; 
     notch = NOTCH[5]; 
     break; 
    case "VII": 
     notch = NOTCH[6]; 
     conversion_chart=VII; 
     break; 
    case "VIII": 
     notch = NOTCH[7]; 
     conversion_chart=VIII; 
     break; 
    } 
    label = name; 
    position = 0; 
} 

回答

8
switch(name) 

switch语句从Java7起只支持。

我猜你正在使用的编译器版本低于Java7

选项:

1) You need to either upgrade to Java7 
2) Change switch statement to `if/else` 
3) Use `int` in switch instead of `String` 
+0

我需要什么,以使这方面的工作,然后解决? – user1514362

+1

你需要升级你的Java到Java7 – kosa

+0

如果这仍然失败,它可能是你的IDE。对于intelliJ,进入'文件>项目结构>项目>项目语言级别'并设置为7以上 –

0

不能切换String实例,仅INT(和字节/字符/短,但时间不长/ double),除非你有Java7 +。你最好的选择现在是改变的if else语句,就像这样:

if("B".equals(string)) { 
    //handle string being "B" 
} else if("C".equals(string)) { 
    //handle string being "C" 
} else ... 

有关开关的详细信息,请参阅Oracle tutorial。他们提到Java7字符串功能:

In Java SE 7 and later, you can use a String object in the switch statement's expression.

+0

你能举个例子吗? – user1514362

+0

@ user1514362查看编辑 –

+0

switch(name)呢? – user1514362

-1

在Java中,只能在byte,char,short或int上进行切换,而不能在String上进行切换。

+2

除非您使用Java 7或更新版本 - 请参阅其他答案。 – Windle

+0

是的,真的够了。 –

3

开关接受来自java的字符串7之前的Java 7种只有INT兼容的类型(短,字节,整型,字符)可以作为开关参数传递

+0

可以downvoter发表评论?? – PermGenError

+0

我真的很抱歉。我一直在试图消除这个倒退,它告诉我我不能改变我的投票。这是一个意外的倒退,是否有撤消? – krico

+0

@krico我刚刚编辑了我的文章,现在可以恢复您的downvote .. :) – PermGenError

相关问题