2016-03-21 2 views
0

Я пытаюсь взять пользовательский камень, бумагу, выбор ножниц (который вводится как r, p или s), но когда я пытаюсь меняйте и называйте это, это дает мне ошибку.Строка, отказывающаяся заявляться, когда она уже была начата и назначена

Вот мой код:

package labs10; 

import java.util.Scanner; 
import static java.lang.System.*; 

public class RPSRunner 
{ 
    public static void main(String args[]) 
    { 
     Scanner kb = new Scanner(System.in); 
     String full; 
     String response; 
     String player = ""; 

     out.print("Select [R,P,S] :: "); 
     response = kb.next(); 
     if (response.equals("R")) { 
      full = "Rock"; 
     } else if (response.equals("P")) { 
      full = "Paper"; 
     } else if (response.equals("S")) { 
      full = "Scissors"; 
     } 
     out.println("Player chooses " + full); 

     RockPaperScissors game = new RockPaperScissors(); 
     game.setPlayers(response); 
     game.determineWinner(); 
     out.println(game); 
    } 
} 

и моя ошибка

 
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The local variable full may not have been initialized 
     at labs10.RPSRunner.main(RPSRunner.java:25) 

ответ

1
String full; 

Вы объявляете full без начального значения. Если пользователь вводит R, P или S, вы присваиваете ему значение. Но что, если они напечатают что-то еще? Тогда full по-прежнему будет неинициализирован. Компилятору это не нравится.

либо присвоить ему значение первоначально ...

String full = null; 

... или добавить последний else пункт для обработки всех другого пользовательского ввода.

if (response.equals("R")) { 
    full = "Rock"; 
} else if (response.equals("P")) { 
    full = "Paper"; 
} else if (response.equals("S")) { 
    full = "Scissors"; 
} else { 
    full = null; 
} 
1

Ну, если response не является ни "R", "P" или "S", full не будет инициализируется в точке, которую вы пытаетесь распечатать с помощью out.println("Player chooses " + full);.

В этом случае вы должны присвоить ему значение по умолчанию (или выбросить исключение).

+0

Я попытался сделать инициализацию его строковым ответом = "R"; , поэтому пользователь мог бы его изменить, но это не исправило. Не могли бы вы рассказать? – Grant

+0

@Grant Как? Простое изменение 'String full;' to 'String full = null;' устранит вашу ошибку компиляции. Значение по умолчанию для 'response' не помогает, так как позже использование может ввести недопустимое значение. Это переменная 'full', которая должна иметь значение по умолчанию. – Eran

+0

Спасибо, извините, я не понимал вначале! – Grant

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