Как исправить переменную, не равную пользовательскому вводу - PullRequest
0 голосов
/ 24 апреля 2020

Моя программа запрашивает у пользователя число, а затем проверяет, находится ли число в диапазоне двух случайно сгенерированных чисел или вне диапазона. Предполагается, что переменная num - это предположение пользователя, но она по-прежнему равна 0. Я не уверен, связано ли это с num = 0 в main, что происходит потому, что я получаю «переменная не инициализирована» ошибка, если нет = 0.

Код:

public static int getValidGuess(Scanner get)
    {
       int num;

        System.out.print("Guess a number: --> ");
        num = get.nextInt();

        return num;
    } // getValidGuess end

    public static boolean displayGuessResults(int start, int end, int num)
    {

      boolean result;

    Random gen = new Random();

    int n1 = gen.nextInt(99) + 1;
    int n2 = gen.nextInt(99) + 1;


    if (n1 < n2){
        start = n1;
        end = n2;
    } //if end
    else
    {
        start = n2;
        end = n1;
    } //else end
    System.out.println("\nThe 2 random numbers are " + start + " and " + end);
    System.out.println("User Guess is " + num);
    if(num >= start && num <= end){
        result = true;
        System.out.println("Good Guess!");
    }
    else if(num < start || num > end){
        result = false;
        System.out.println("Outside Range.");
    }
    else{
        result = false;
    }
    return result;

    } // displayGuessResults end

    public static void main(String[] args) {
        // start code here
       int start = 0, end = 0, num = 0;
       Scanner scan = new Scanner(System.in);
       String doAgain = "Yes";

        while (doAgain.equalsIgnoreCase("YES")) {
            // call method
            getValidGuess(scan); 
            displayGuessResults(start, end, num);
            System.out.print("\nEnter YES to repeat --> ");
            doAgain = scan.next();
        } //end while loop

    } //main end

1 Ответ

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

Переменные в разных функциях магически не одинаковы только потому, что имеют одинаковое имя. Если вы хотите иметь возможность обмениваться переменными, не передавая их в качестве параметров или возвращаемых значений, вам нужно вместо этого объявить их в классе.

В частности, вот ваши два варианта. Вариант 1 (рекомендуется): измените getValidGuess(scan); на num = getValidGuess(scan);. Вариант 2: поместите public static int num = 0; прямо в ваш класс, вне всех ваших функций, и удалите объявления num из всех ваших функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...