2012-09-20 13 views
6

Próbuję skompilować i otrzymuję ten błąd:switch daje niezgodne typy błędów

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

Dlaczego otrzymuję ten błąd? Jak mogę to naprawić? Jest w pakiecie i nie mogę tego zrozumieć. Oto kod:

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

Odpowiedz

8
switch(name) 

switch oświadczenie sznurkiem jest obsługiwana tylko począwszy od Java7.

Chyba wersja kompilatora używasz jest mniejsza niż Java7

Opcje:

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

Co muszę naprawić, tak aby działać na to wtedy? – user1514362

+1

Musisz zaktualizować java do Java7 – kosa

+0

A jeśli to się nie uda, może to być IDE. Dla intelliJ, przejdź do "Plik> Struktura projektu> Projekt> Poziom języka projektu" i ustaw na 7 i powyżej –

0

nie można przełączyć na instancję String, tylko int (a bajt/char/short, ale nie długo/double), chyba że masz Java7 +. Najlepszym rozwiązaniem jest teraz zmieni się jeśli else, tak:

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

Aby uzyskać więcej informacji na temat przełączania, zobacz Oracle tutorial. Wspominają o funkcji String języka Java7:

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

+0

Czy możesz dać mi przykład? – user1514362

+0

@ user1514362 zobacz edit –

+0

Co z przełącznikiem (nazwą)? – user1514362

-1

W języku Java można przełączać tylko bajt, znak, krótki lub int, a nie ciąg.

+2

O ile nie używasz Javy 7 lub nowszej - zobacz inne odpowiedzi. – Windle

+0

Tak, to prawda. –

3

Przełącznik akceptuje ciąg znaków z java 7. przed Java 7 tylko int kompatybilne typy (krótki, bajt, int, char) mogą być przekazywane jako argumenty przełącznik

+0

Czy odbiorca może dodać komentarz? – PermGenError

+0

Bardzo mi przykro z tego powodu. Próbowałem usunąć to twierdzenie i mówi mi, że nie wolno mi zmieniać mojego głosu. To był przypadkowy przypadek, czy można cofnąć? – krico

+0

@krico Właśnie zredagowałem swój post, możesz teraz przywrócić swoją wersję .. :) – PermGenError

Powiązane problemy