2012-08-03 8 views
2

이상한 문제가 발생했습니다. 나는 진술서를 가지고 있는데 진술서가 전혀 없다. 나는 이클립스 디버거를 통해 그것을 밟았으며 위의 라인을 얻은 다음 라인으로 바로 간다. 컴파일되고 오류없이 실행됩니다.switch 문을 입력하지 않았습니다.

이것은 일반적인 개요입니다 :

for (int k = 0; k<9; k++) { 
     System.out.println("Program is here - #1"); 
     doSomething(); 
     switch (switchcode) { 

     case 1: 
      switch (k) { 

      case 1: case 2: case 3: 
       doOneOneTwoThree(); //#2 
       break; 
      case 4: case 5: case 6: 
       doOneFourFiveSix(); //#3 
       break; 
      default: 
       System.err.println("error k defaulted in case 1"); 
       break; 
      } 
      break; 
     case 2: 
      switch (k) { 

      case 1: case 2: case 3: 
       doTwoOneTwoThree(); //#4 
       break; 
      case 4: case 5: case 6: 
       doTwoFourFiveSix(); //#5 
       break; 
      default: 
       System.err.println("error k defaulted in case 2"); 
       break; 
      } 
      break; 
     default: 
      System.err.println("error switchcode defaulted"); 
      break; 
     } 

     doSomethingElse(); 
    } 

뭔가 잘못, 의심의 여지를하고 있어요,하지만 난 정말 정확히 모른다. 케이스 안에서 k를 켜기로 했습니까? 나는 이것을 전에 해 봤는데 아마 운 좋게 일했을 것이다.

큰 for 루프 내에서 case 문을 중첩하면 문제가 발생합니까?

"Branch Prediction Fail"가 가끔 연구하는 동안 나는 그것이 정확히 무엇인지는 모르지만 그것이 일어날 수도 있습니다.

문제가 발생하는 기본값 인 경우 break;입니까? 나는 그들없이 시도하고 동일한 결과를 보았 기 때문에 그것이라고 생각하지 않는다.

죄송합니다. 긴 코드와 질문입니다. 어떤 지침을 주셔서 감사합니다.

+4

문제를 설명하는 짧지 만 완전한 * 프로그램으로 리팩터링하십시오. –

+6

'switchcode'의 값은 무엇입니까? – thegrinner

+2

'doSomething()'이 예외를 throw하지 않습니까? 이것은 분기 예측 실패와 관련이 없습니다 ... –

답변

4

Eclipse가 필요한 라인을 찾지 못하면 Eclipse가 컴파일 한 코드와 소스가 일치하지 않을 수 있습니다.

새 빌드 &을 사용해보세요.

Eclipse를 다시 시작하거나 프로젝트를 다시 가져 오는 것이 도움이 될 수 있습니다.

+0

그 덕분에, 고마워. –

2

가장 가능성있는 설명은 자신이 생각하는 컴파일 된 코드를 디버깅하지 않는다는 것입니다. 새로운 소스를 사용하여 약간 오래된 클래스를 실행할 때 볼 수있는 것은 소스가 정확하고 최신이지만 컴파일 된 코드는 일종의 올바른 것으로 보이는 오래된 라인 번호로 건너 뜁니다.

가능한 한 빌드를 정리하려고합니다. 작동하지 않는다면 코드를 움직여보십시오. 예 : 많은 빈 줄을 추가했습니다.

관련 문제