2012-09-20 31 views
6

Estoy tratando de compilar y me sale este error:sentencia switch da tipos incompatibles error

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

¿Por qué recibo este error? ¿Cómo lo arreglo? Está en el paquete y parece que no puedo resolverlo. Aquí está el código:

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; 
} 

Respuesta

8
switch(name) 

switch comunicado con la cadena está soportado desde Java7 en adelante solamente.

supongo que la versión del compilador que está utilizando es menor que Java7

Opciones:

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

¿Qué necesito para arreglar con el fin de hacer que funcione en esto, entonces? – user1514362

+1

Necesita actualizar su java a Java7 – kosa

+0

Y si esto sigue fallando, podría ser su IDE. Para intelliJ, ve a 'Archivo> Estructura del proyecto> Proyecto> Nivel de idioma del proyecto' y establece en 7 y por encima de –

0

no se puede cambiar a través de una instancia de String, solamente int (y el byte/char/corto, pero no mucho/doble), a menos que tenga Java7 +. Su mejor opción ahora es cambiar a si else, así:

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

Para obtener más información sobre la conmutación, ver el Oracle tutorial. Mencionan la funcionalidad Java7 Cadena:

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

+0

¿Puedes darme un ejemplo? – user1514362

+0

@ user1514362 ver la edición –

+0

¿Qué pasa con el interruptor (nombre)? – user1514362

-1

En Java, sólo se puede hacer un interruptor en byte, char, short o int, y no una cadena.

+2

A menos que esté utilizando Java 7 o posterior - vea otras respuestas. – Windle

+0

Sí, es verdad. –

3

interruptor acepta un Cadena de java 7. antes de Java 7 única int tipos compatibles (corto, byte, int, char) se pueden pasar como argumentos interruptor

+0

¿puede el infractor dejar un comentario? – PermGenError

+0

Lo siento mucho por eso. He estado tratando de eliminar este voto negativo y me dice que no puedo cambiar mi voto. Fue un voto negativo accidental, ¿hay un deshacer? – krico

+0

@krico Acabo de editar mi publicación, ahora puedes revertir tu voto negativo ... :) – PermGenError

Cuestiones relacionadas