Почему этот код печатает бесконечное количество "Каково ваше предположение?" - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь сделать игру в угадывание чисел в диапазоне от 1 до 100. Программа остановится, если пользователь угадает правильный номер.

Мой текущий код:

import java.util.Scanner;
import java.util.Random;

public class GuessingGame {
    public static void main(String[] args) {
        Random randomNumber = new Random();
        Scanner reader = new Scanner(System.in);
        System.out.println("What's your guess? ");
        int n = reader.nextInt();
        reader.close();

    int Number = randomNumber.nextInt(100 + 1);
    int guess = n;
     while (guess != Number) {
        System.out.println("What's your guess? ");
        new Scanner(System.in);
    }

    if (guess == Number) {
        System.out.println("Your have guessed the correct number! ");
    }

    else if (guess < Number) {
        System.out.println("Your number is too low! ");
    }

    else if (guess > Number) {
        System.out.println("Your number is too high! ");
    }
}   
}            

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Здесь полезно использовать форматтер в вашей IDE.Вы сможете увидеть, что условия if, которые следуют за циклом, должны быть внутри цикла, и вы должны читать чтение предположения из ввода.

Кстати, вы никогда не должны закрывать ввод, если вы явно не делаете 'больше не хочу ничего читать с него.

try

 Random randomNumber = new Random();
 Scanner reader = new Scanner(System.in);
 int number = randomNumber.nextInt(100 + 1);
 while(true) {
    System.out.println("What's your guess? ");
    int guess = reader.nextInt();

    if (guess == Number) {
        System.out.println("You have guessed the correct number! ");
        break; // no need to guess more

    } else if (guess < Number) {
        System.out.println("Your number is too low! ");

    } else if (guess > Number) {
        System.out.println("Your number is too high! ");
    }
}   
0 голосов
/ 25 июня 2018

Цикл while - это бесконечный цикл. Кроме того, вы должны избегать использования 'Number' в качестве имени переменной, поскольку в Java есть класс с таким же именем java.lang.Number. Вам также может понадобиться любое количество переменных, используя один объект класса Scanner. Таким образом, более чистый код будет выглядеть так:

while (guess != number) {
        System.out.println("What's your guess? ");
        guess = reader.nextInt();
    }

Теперь, если вы решите вышеуказанные проблемы, ваш код никогда не перейдет к двум блокам else-if, потому что к тому времени, когда вы прервете цикл while, у вас будет «догадываться», всегда равное «числу». Я думаю, что вы пытаетесь достичь здесь:

while (guess != number) {
    System.out.println("What's your guess? ");
    guess = reader.nextInt();

    if (guess == number) {
        System.out.println("Your have guessed the correct number! ");
    }

    else if (guess < number) {
        System.out.println("Your number is too low! ");
    }

    else if (guess > number) {
        System.out.println("Your number is too high! ");
    }
}    
0 голосов
/ 25 июня 2018

Измените цикл while на

while (guess != Number) {
    if (guess == Number) {
     System.out.println("Your have guessed the correct number! ");
     break;
    }

    else if (guess < Number) {
     System.out.println("Your number is too low! ");
    }

    else if (guess > Number) {
     System.out.println("Your number is too high! ");
    }

    System.out.println("Guess Again?");
    guess = reader.nextInt();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...