代码一直在说我还没有在猜游戏的代码中初始化我的字符串变量'restart'

问题描述 投票:-3回答:2

我正在尝试为当前正在使用循环的作业构建猜谜游戏。我正在尝试让我的游戏为用户提供再次玩的选项。我很难设置最后的代码,因此我在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"));

    }            
   }
java variable-assignment hilo
2个回答
1
投票

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


0
投票

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

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

类加载是java中的运行时事物,这意味着当您创建一个对象时,该类将通过类加载进行加载,仅使用默认值初始化成员变量。JVM不会花时间为您的局部变量提供默认值,因为某些方法会永远不会被调用,因为方法调用可能是有条件的,所以如果永远不要使用这些默认值,为什么要花一些时间为它们提供默认值并降低性能。]

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

guess == num为假,则在restart.equals("Y")重新启动不包含任何内容时

因此,在使用之前,您的变量应该具有一定的值。

© www.soinside.com 2019 - 2024. All rights reserved.