我必须制作一个基本的猜谜游戏,我在这段代码中遇到一些问题我试图将一个由不同方法生成的随机数分配给变量secretNumber但是当我运行这个代码变量时如果我在if else语句之外添加另一个print语句,则表示该变量尚未初始化,因此它不会保存它只是打印出变量并获取它。任何有关如何做到这一点的帮助将不胜感激。
public static void main(String[] args) {
int secretNumber, playerGuess;
String difficulty;
Scanner kb = new Scanner(System.in);
System.out.println("please select your difficulty");
System.out.println("E = easy M = medium, H = hard");
difficulty = kb.nextLine();
if (difficulty.equalsIgnoreCase("E")) {
secretNumber = easyNumber();
System.out.println(" " + secretNumber + " ");
} else if (difficulty.equalsIgnoreCase("M")) {
secretNumber = mediumNumber();
System.out.println(" " + secretNumber + " ");
} else if (difficulty.equalsIgnoreCase("H")) {
secretNumber = hardNumber();
System.out.println(" " + secretNumber + " ");
}
}
答案 0 :(得分:1)
如果difficulty
不是E
,M
或H
,则永远不会输入if
子句。因此,变量secretNumber
将不会被初始化。
如何解决此问题?
在声明时初始化secretNumber
(在使用之前进行初始化是一种很好的做法):
int secretNumber = -1; // you can change this value
另一种方法是添加else
块:
} else if (...) {
...
} else {
secretNumber = -1; // you can change this value
}
答案 1 :(得分:0)
回答标题问题:是,当然 要解决您的问题:只需执行编译器所说的内容:初始化变量:
int secretNumber = 0;
编译器抱怨,因为您无法确定用户输入了三种可能性中的一种。如果用户输入了其他内容,则不会为该变量分配任何值,因此您将使用未初始化的变量。
答案 2 :(得分:0)
默认情况下不初始化局部变量。您必须在首次使用之前对其进行显式初始化。
使用0或-1表示原语,使用null
表示Object进行初始化。
您可以通过在最后一个
中添加else
来解决此问题
if (difficulty.equalsIgnoreCase("E")) {
secretNumber = easyNumber();
System.out.println(" " + secretNumber + " ");
} else if (difficulty.equalsIgnoreCase("M")) {
secretNumber = mediumNumber();
System.out.println(" " + secretNumber + " ");
} else if (difficulty.equalsIgnoreCase("H")) {
secretNumber = hardNumber();
System.out.println(" " + secretNumber + " ");
} else {
secretNumber = 0;//any default value
}