2016-08-25 5 views
0
import java.util.Scanner; 
import java.util.Random; 
import static java.lang.System.out; 

class TestingStuf { 
    enum tooWhat {tooHigh, tooLow, justRight}; 

    public static void main(String[] args) { 
     Scanner keyboard = new Scanner(System.in); 
     Random myRandom = new Random(); 

     tooWhat guess; 

     out.println("Pick a number between 1 and 10."); 
     int userGuess = keyboard.nextInt(); 
     int randomNumber = myRandom.nextInt(10) + 1; 

     if (userGuess < randomNumber) { 
      guess = tooWhat.tooLow; 
     }else if (userGuess > randomNumber) { 
      guess = tooWhat.tooHigh; 
     }else if (userGuess == randomNumber) { 
      guess = tooWhat.justRight; 
     } 

     out.println("Your guess is:"); 

     if (guess == tooWhat.tooLow) { 
      out.println("Too low."); 

     }else if (guess == tooWhat.tooHigh) { 
      out.println("Too high."); 

     }else if (guess == tooWhat.justRight) { 
      out.println("Correct!"); 

     } 

      keyboard.close(); 
    } 
} 

내 코드에서 "로컬 변수 추측이 초기화되지 않았을 수 있습니다."라는 두 번째 "if"문 집합에 오류가 있습니다. 이전 "if"문 "guess"변수에 사용자 입력에 종속 된 값을 제공합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 당신이 당신의 코드를 보면 guess가 초기화되지 않습니다되어 if...else if...else if를 통해 경로가처럼"if"문에서 로컬 변수 오류 (Java)

+0

사례 중 하나에 할당 된 경우에만 값이 할당됩니다. 아무도 수행하지 않으면 어떻게됩니까? else else의 마지막에 else를 처리해야합니다. –

+1

마지막 else else if를 else로 바꾸면 작동합니다. –

+0

또는 그냥 기본 값으로 시작하여 .... –

답변

2

, 그것은 을 보인다. 컴파일러가 경고하는 것입니다. 그 다음 코드에서는 guess에 확실히 값이 있기 때문입니다.

인간으로서 우리는 당신의 세 조건이 상호 배타적이라는 것을 알고 있지만 컴파일러는 우리만큼 똑똑하지는 않습니다.

if (userGuess < randomNumber) { 
    guess = tooWhat.tooLow; 
}else if (userGuess > randomNumber) { 
    guess = tooWhat.tooHigh; 
}else { // *** No `if` 
    guess = tooWhat.justRight; 
} 
0

변경 추측이 초기화되지 않은 유지 가능성이없는 있다는 else 문

if (userGuess < randomNumber) { 
     guess = tooWhat.tooLow; 
    }else if (userGuess > randomNumber) { 
     guess = tooWhat.tooHigh; 
    }else 
     guess = tooWhat.justRight; 

컴파일러가 알고 그런 식으로 당신의 다른 경우 마지막 문 : 그냥 else 아니라 else if (...)보다는 최종 하나를 만들 .

0

가변 추측이 if..else if..else..if ladder를 그냥 통과하는 값을 제공해야하는지 확실하지 않습니다. 컴파일러가 이러한 사다리 단계 각각에 대한 값을 평가한다면 컴파일러의 과도 함을 알 수 있습니다. 코드로 이동하면 마지막 else를 else로 바꾸면 문제가 해결됩니다.