我正在尝试为当前正在使用循环的作业构建猜谜游戏。我正在尝试让我的游戏为用户提供再次玩的选项。我很难设置最后的代码,因此我在youtube上举了一个例子。尽管我声明了变量restart,但编译器始终告诉我尚未初始化它。此代码的任何帮助将不胜感激
import java.util.Scanner;
import java.util.Random;
public class High_Low_Game {
public static void main (String[] args){
Random rand=new Random();
Scanner scan= new Scanner(System.in);
int guess,num,count=0;
String restart;
num=rand.nextInt(99+1);
do{
System.out.println("Please enter a number from 1-100,press 0 to quit");
guess=scan.nextInt();
count++;
while(guess!=0)
if(guess>num){
System.out.println("Your guess was too high, try again");
guess=scan.nextInt();
count++;}
else
if(guess<num){
System.out.println("The number is too low,enter another guess ");
guess=scan.nextInt();
count++;}
else
if(guess==num){
System.out.println("You have guessed correctly");
System.out.println("It took you "+count+ " guesses");
System.out.println("Would you like to play again? (Y/N)");
restart=scan.next();}
}while(restart.equals("Y"));
}
}
这表明该变量尚未初始化,因为只有在guess == num时才会初始化。
如果您对此简单的事情需要详细的答案,请阅读此
与成员变量不同,局部变量在类加载时不会获得默认值。
类加载是java中的运行时事物,这意味着当您创建一个对象时,该类将通过类加载进行加载,仅使用默认值初始化成员变量。JVM不会花时间为您的局部变量提供默认值,因为某些方法会永远不会被调用,因为方法调用可能是有条件的,所以如果永远不要使用这些默认值,为什么要花一些时间为它们提供默认值并降低性能。]
在这种情况下,重新启动是main方法的局部变量,因此它不会获得默认值,如果您来自C,C ++背景,则倾向于认为它可能包含垃圾值,但是Java中没有这样的东西。
guess == num
为假,则在restart.equals("Y")
重新启动不包含任何内容时
因此,在使用之前,您的变量应该具有一定的值。