Код постоянно говорит, что я не инициализировал строковую переменную restart в своем коде для игры в догадки - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь построить игру на угадывание для задания, над которым я сейчас работаю, используя циклы. Я пытаюсь заставить мою игру дать пользователю возможность играть снова. Я с трудом пытался настроить этот последний бит кода, поэтому я последовал примеру на 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"));

    }            
   }

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Это указывает на то, что переменная не была инициализирована, потому что она всегда инициализируется, только если предположить == num.

0 голосов
/ 13 апреля 2020

Если вам нужен подробный ответ для этой простой вещи, прочитайте это

В отличие от переменных-членов, локальные переменные не получают значения по умолчанию во время загрузки класса.

Загрузка класса - это вещь времени выполнения в java означает, что когда вы создаете объект, класс загружается с загрузкой класса, только переменные-члены инициализируются со значением по умолчанию JVM не требует времени, чтобы присвоить значение по умолчанию вашему локальные переменные, потому что некоторые методы никогда не будут вызваны, потому что вызов метода может быть условным, поэтому зачем тратить время на то, чтобы присвоить им значение по умолчанию и снизить производительность, если эти значения по умолчанию никогда не будут использоваться.

В вашем случае restart является локальной переменной метода main, поэтому он не получает значения по умолчанию, и если вы пришли из C, фона C ++, вы склонны думать, что он может содержать значение мусора, но в java такого нет.

когда guess == num равно false, тогда как при restart.equals("Y") перезапуск ничего не содержит

Итак, перед использованием у вашей переменной должно быть какое-то значение.

...