2014-03-29 4 views
0

바코드를 나타내는 문자열 매개 변수를 사용하고 해당 문자열에 해당하는 숫자를 반환해야하는 메서드가 있습니다. 아래 코드 :switch 문과 호환되지 않는 형식?

public int codeToDigit (String code) throws IOException 
{     
     switch (code) 
     { 
      case "||:::": return 0; 
      case ":::||": return 1; 
      case "::|:|": return 2; 
      case "::||:": return 3; 
      case ":|::|": return 4; 
      case ":|:|:": return 5; 
      case ":||::": return 6; 
      case "|:::|": return 7; 
      case "|::|:": return 8; 
      case "|:|::": return 9; 
     } 
} 

두 가지가 혼란 스럽습니다. 먼저 기본값으로 무엇을 넣어야합니까? 지금은 자리 표시 자와 마찬가지로 10 개가 있습니다. 그러나 그것은 정확하지 않습니다.

BarCode.java:56 : 발견 호환되지 않는 유형 : java.lang.String의 필요 : 스위치를 int로 (코드)

그들은 호환되지 않는 것 내가 컴파일 할 때 또한, 나는 다음과 같은 오류가 발생합니다 외관상으로는 유형? 이 문제를 해결하는 방법에 대한 의견이 있으십니까? 도와 주셔서 감사합니다!

편집 : 많은 분들이 제가 한 Java 7 로의 업그레이드에 대해 언급했습니다. Java 7에서 작업하고 Update 51을 업데이트했습니다. 그러나 여전히 동일한 문제가 발생합니다.

+0

sidenote : 이러한 'break' 문은 어쨌든 그 지점에 도달하지 않으므로 놓을 필요가 없습니다.'return'은 더 빨리 중지합니다. –

+0

그것은 당신이 여기서 성취하고자하는 것에 달려 있습니다. switch 문은 정수 또는 문자를 사용합니다. switch 문에서 전체 문자열을 찾으려고하면 이클립스를 열어 볼 수있을 때 체크 아웃해야 할 것입니다. 정수와 문자는 쉽습니다. 당신은 그 성격을 단지 당신이 찾고있는 성격을 취할 수 있습니다. 하지만 대부분의 경우 문자 집합 (문자열)을 찾고 스위치를 사용하고 if 문을 사용한다고 생각합니다. –

+0

자바 1.7 이상은'switch ()'허용 –

답변

1

Java 1.7+에서는 이미 언급했듯이 break;에 도달 할 수없는 다른 컴파일러 오류 (사용자의 return 문 때문에 불필요 함)가 표시됩니다. 당신은 그들을 제거 할 수 있고 그것은 잘 컴파일됩니다.

그러나 Java 1.6 및 이전 버전에서는 호환되지 않는 유형 오류가 발생합니다. 이는 Strings in case statements were supported in Java only starting with 1.7이기 때문입니다.

이 문제를 해결하려면 Java를 1.7 이상으로 업그레이드하거나 코드의 숫자 값이나 열거 형을 사용해보십시오.

2

귀하의 질문에 대한 답변을 원하시면 에 < SE 7 버전으로 업그레이드 할 수 있습니다. 그렇지 않은 경우 if/else로 변환하십시오.

둘째, break 문을 모두 제거하십시오. 문제가 해결 되더라도 컴파일러 오류가 발생합니다.

마지막으로 합법적 인 답장이없는 경우 기본 열에 어떤 종류의 오류가 발생합니다. IllegalArgumentException이 아마도 적합 할 것입니다

0

가능한 경우 다른 대답이 나와 있습니다 : Java 7로 업그레이드하십시오. 보안 및 편의를 위해서라면 (그 두 가지가 올 수 있기 때문에 아이러니합니다. 동일한 결과에서).

그러나 자바 버전 업그레이드가 옵션이 아닌 경우 (학교의 실험실 컴퓨터를 사용하거나 강사의 컴파일러를 사용하여 올바르게 처리하는 경우 해당되지 않을 수 있음), 또한 문자열을 데이터로 가진 열거 형을 만들고, 간단한 "구문 분석"메서드로 문자열을 적절한 열거 형 멤버로 변환 한 다음 열거 형을 대신 사용할 수 있습니다.

이렇게하면 문제가 반복 될 수 있지만 올바른 방법입니다.

Java 1.7 컴파일러를 열어 놓은 사람 (또는 다른 사람과 이야기 한 사람)과 같이 행동하지 않겠지 만, "일반적으로 문자열로 된 객체를 사용하는 switch 문에서 효율적인 바이트 코드를 생성합니다. then-else 문 "(source).

그러나 열거 형을 전환해도 꽤 잘 작동 할 것입니다. 네가 네 방식과 같은 방식으로 데이터를 나타 내기 위해 네이밍을 어떻게 관리 할 지 확신 할 수는 없지만 ...

관련 문제