想知道我的代码有什么问题;它会在while循环中挂起

时间:2017-02-15 19:46:41

标签: java loops if-statement while-loop

我环顾四周,似乎找不到问题究竟是什么的答案。它执行很好,直到循环,然后它似乎忽略循环并挂起,所以我很困惑。

package classGame;
import java.util.*;

public class GameTwo {
    static int randomNumber;
    static int numOfGuess = 5;
    static Scanner GameTwo = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("Frank: Hello there! My name is Frank. This is the introduction to the game.");
        System.out.print("Frank: Please tell me what you would like to be called: ");

        if(GameTwo.hasNextLine()) {

           String userName =GameTwo.nextLine();
           System.out.println(userName + ": My name is: " + userName);
           System.out.println("Frank: Well " + userName + ", it's nice to meet you. ");
           System.out.println("Frank: Lets play a little game, I want you to guess a number, It's already" +
        " in my head and it's between 1-10.");

           int guessResult = 1;
           int randomGuess = 0;
           while(guessResult != -1) {
             randomGuess = GameTwo.nextInt();
             guessResult = checkGuess(randomGuess);
           }        
           while (randomGuess != guessResult) {
             System.out.println(userName + ":Is the number: ");
             randomGuess = GameTwo.nextInt();

             if(randomGuess < 1 || randomGuess > 10 || randomGuess > guessResult || randomGuess < guessResult) {
                System.out.println("Frank: Thats not right "+ userName);
             } else if (randomGuess == guessResult) {
                System.out.println("Frank: Hey...Thats pretty good...You got it!");
            }
          }
        }
    }
    public static int getRandomNum () {
        randomNumber = (int) (Math.random()*10);
        return randomNumber;
    }

    public static int checkGuess(int guess) {
        if(guess == randomNumber) {
            return -1;
        } else {
            return guess;
        }
    }
}

这是它打印到循环的内容

弗兰克:你好!我叫弗兰克。这是游戏的介绍。

弗兰克:请告诉我你想叫什么:T

T:我的名字是:T

弗兰克:恩,很高兴见到你。

弗兰克:让我们玩一个小游戏,我想让你猜一个数字,它已经在我的脑海里了,它在1-10之间。

1 个答案:

答案 0 :(得分:0)

我认为这是Scanner.nextInt()工作原理的一个问题。 nextInt()接受下一个找到的Integer,但它不像nextLine()那样清除缓冲区。

有关此问题的详情,请参阅此链接:How does input.nextInt() work exactly?

试试这个,看看你的循环是否正常继续:

while(guessResult != -1) {

    randomGuess = GameTwo.nextInt();
    guessResult = checkGuess(randomGuess);
    GameTwo.nextLine();
    System.out.println("Random Guess: " + randomGuess); //Try here

} 

我认为循环被挂起的原因是因为nextInt()一直在输入缓冲区中找到randomGuess编号并一遍又一遍地执行。要对此进行测试,只需将System.out.println("Random Guess: " + randomGuess);放入循环中,然后一遍又一遍地查看是否使用相同的数字进行打印。

否则,我需要查看程序的输出以进一步诊断问题。

编辑:您可以将程序的输入/输出发布到崩溃的位置吗?这会有所帮助。另外,你的循环中的System.out.println()是否以while(guessResult!= -1)或第二个开头?

编辑2:我使用我的编辑测试了此代码,它似乎按预期工作(ish)。初始while循环不执行预期的操作。猜测正确数字的“游戏”方面都发生在第一个循环中。我正在“玩”游戏并猜测数字,但是一旦我弄清楚它,它会移动到第二个循环,大概就是你真正想要“玩”的地方。在第一个循环中获取正确的数字,然后将guessResult变量设置为-1。然后,当用户试图猜测他们应该在哪里时,“正确”的数字现在为-1。

我不认为游戏曾经“挂断”,它只是在第一个循环中静静地等待你的输入。要解决这个问题:

只需删除第一个while循环(及其内容),游戏就可以正常运行。