2016-08-25 2 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» Я даю переменной «guess» значение, зависящее от ввода пользователя. Что я делаю не так?Локальная переменная ошибка в «если» заявление (Java)

+0

ему присваивается только значение, если один из случаев присваивает ему один ... Что делать, если никто из них не делает? Вам нужно будет обработать это в другом в конце if else –

+1

Заменить последнее 'else if' на' else', и он будет работать. –

+0

Или даже просто присвойте ему значение по умолчанию, чтобы начать с ... –

ответ

2

Если вы посмотрите на ваш код, он кажется как есть путь через if...else if...else ifguess, где никогда не инициализируется. Это то, о чем предупреждает компилятор, потому что код, следующий за ним, ожидает, что guess определенно будет иметь значение.

Хотя мы, как люди, знаем, что ваши три условия являются взаимоисключающими, компилятор не такой умный, как мы. Просто сделайте окончательную один else, а не else if (...):

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

Измени свое последнее, если другое заявление на другое заявление

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

Таким образом, компилятор знает, что нет никакой возможности, что догадывается остается неинициализированными ,

0

Компилятор не уверен, что переменная догадаться когда-либо будет предоставлено значение, основанное на простом прохождении if..else if..else..if. Если компилятор должен был оценивать значения для каждого из этих шагов лестницы, он мог бы найти это, но это было бы излишним для компилятора. Переход по коду, заменив last else, если с else решит вашу проблему.

Смежные вопросы