Reputation: 127
I am trying to compile and I get this error:
enigma/Rotor.java:30: incompatible types found : java.lang.String required: int switch(name){
1 error
Why am I getting this error? How do I fix it? It's in the package and I can't seem to figure it out. Here's the code:
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;
}
Upvotes: 9
Views: 21238
Reputation: 11
If you're using maven then change build in pom as following else change JDK version as 1.8+
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
Upvotes: 1
Reputation: 66637
switch(name)
switch
statement with String is supported from Java7 onwards only.
I guess the compiler version you are using is less than Java7
Options:
if/else
int
in switch instead of String
Upvotes: 12
Reputation: 306
If you are using maven project then simply you can add following piece of code to ypur pom.xml and resolve your problem :
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
Upvotes: 6
Reputation: 46398
switch accepts a String from java 7. prior to java 7 only int compatible types (short,byte,int, char) can be passed as switch arguments
Upvotes: 4
Reputation: 13709
In Java, you can only do a switch on byte, char, short, or int, and not a String.
Upvotes: -1
Reputation: 7326
You cannot switch over a String instance, only int (and byte/char/short, but not long/double), unless you have Java7+. Your best option now is to change to if else statements, like so:
if("B".equals(string)) {
//handle string being "B"
} else if("C".equals(string)) {
//handle string being "C"
} else ...
For more info on switching, see the Oracle tutorial. They mention the Java7 String functionality:
In Java SE 7 and later, you can use a String object in the switch statement's expression.
Upvotes: 0