-4

我正在尝试为我目前正在使用循环的作业构建一个猜谜游戏。我试图让我的游戏让用户可以选择再次玩。我在尝试设置最后一段代码时遇到了困难,所以我按照 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"));

    }            
   }
4

2 回答 2

1

这表明该变量尚未初始化,因为只有当guess 为== num 时它才被初始化。

于 2020-04-13T03:32:06.470 回答
0

如果您需要这个简单的事情的详细答案,请阅读此

与成员变量不同,局部变量在类加载时不会获得默认值。

类加载是java中的运行时事情,这意味着当你创建一个对象时,类加载类加载只有成员变量用默认值初始化JVM不需要时间给你的局部变量默认值,因为有些方法永远不会之所以调用是因为方法调用可以是有条件的,所以如果这些默认值永远不会被使用,为什么还要花时间给它们默认值并降低性能。

在您的情况下,restart 是 main 方法的局部变量,因此它没有获得默认值,如果您来自 C、C++ 背景,您倾向于认为它可能包含垃圾值,但在 java 中没有这样的东西。

whenguess == num为 false then in while restart.equals("Y")restart 不包含任何内容

所以简而言之,在使用之前,你的变量应该有一些价值。

于 2020-04-13T03:58:39.963 回答