【问题标题】:Infinite do-while loop无限的do-while循环
【发布时间】:2014-11-17 18:33:54
【问题描述】:

我的代码中有一个无限循环,我对如何修复它感到困惑。如果有人能指出我正确的方向或帮助我,那将非常感激。谢谢。 方法如下:

public static void random(){
    int rand = (int) (Math.random() * 11); 
    Scanner input = new Scanner(System.in); 
    System.out.print("Enter a guess: ");
    int guess = input.nextInt();
    if (guess == rand){
        do {
            System.out.println("Your guess is " + guess + "."); 
            System.out.println("Your guess is correct! Yay!"); 
        } while (guess == rand); 
    }
    if (guess < rand){
        do {
            System.out.println("Your guess is " + guess + ".");
            System.out.println("Your guess is too low. Guess again"); 
        } while (guess!= rand);
    if (guess > rand){
        do {
            System.out.println("Your guess is " + guess + ".");
            System.out.println("Your guess is too high. Guess again");
        } while (guess > rand);
    }

【问题讨论】:

  • 如果猜测太低,为什么打印消息会改变?
  • 使用调试器单步调试您的代码。应该很容易发现。
  • @Andrew 我真的怀疑这个学生被教导使用调试器
  • 没错。 do...while 循环不包含任何更改 guess 的代码。

标签: java infinite-loop do-while


【解决方案1】:
int guess = Integer.MIN_VALUE;
do {
    guess = input.nextInt();
    System.out.println("Your guess is " + guess + ".");
    if (guess == rand)
        System.out.println("Your guess is correct! Yay!"); 
    else if (guess < rand)
        System.out.println("Your guess is too low. Guess again"); 
    else
        System.out.println("Your guess is too high. Guess again");
} while (guess != rand);

【讨论】:

  • 当然。对于 OP - 循环中不需要循环。事实上,循环中的循环将永远运行,而不会再次提示您输入另一个答案。想一想每种情况是什么,以及它如何仅适用于一组条件。
  • 感谢您的回答,但循环仍然是无限循环并且不会终止
  • 我做了一些改变。现在,如果您猜对了数字,循环应该会终止。
【解决方案2】:

由于您的 while 循环,您的代码处于无限循环中。如果用户猜测低于 rand,你的代码将进入 while 循环并无限继续。这是一个可能的解决方案

public static void random(){
    int rand = (int) (Math.random() * 11); 
    Scanner input = new Scanner(System.in); 
    System.out.print("Enter a guess: ");
    boolean guessed = false;

    while(guessed == false){
    int guess = input.nextInt();

    if(guess == rand){

        System.out.println("Your guess is " + guess + "."); 
        System.out.println("Your guess is correct! Yay!"); 
        guessed = true;
    }
    if(guess < rand){

            System.out.println("Your guess is " + guess + ".");
                System.out.println("Your guess is too low. Guess again"); 
                guessed = false;
    } 
    if(guess > rand){

            System.out.println("Your guess is " + guess + ".");
            System.out.println("Your guess is too high. Guess again");
            guessed = false;
    }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多