循环 - 看似忽略if语句

时间:2014-10-16 05:55:32

标签: java while-loop java.util.scanner

目标是要求用户猜测1到10之间的数字,生成1到10的随机数。

如果用户猜错号码告诉他们他们是"太高"或者"太低"让他们再试一次。

跟踪用户做出的猜测次数。

当用户猜出随机数时,告诉他们他们做了多少次猜测。

这就是我所拥有的。当我输入一个数字时,它会在while循环中返回正确的if语句。之后的任何输入都会返回相同的if语句,即使它不是真的。

我完全错了吗?我究竟做错了什么?对不起,我对while循环很新。

public static void main(String[] args) {

        System.out.println("Guess a number from 1 to 10.");

    Scanner userInput = new Scanner(System.in);

    int userNumber = userInput.nextInt();

    int rand = (int) (Math.random()*10) + 1;

    int numOfGuesses = 0;

    while (userNumber != rand) {

        if (userNumber > rand) {    
            System.out.println("Too high, guess again.");
            numOfGuesses++;

        } if (userNumber < rand) {
                System.out.print("Too low, guess again.");
                numOfGuesses++;
        }

        userInput.nextInt();
    }

    if (userNumber == rand) {
        System.out.println("That's the correct number!");
        numOfGuesses++;
        System.out.println("You made " + numOfGuesses + " guesses.");
        }
    }
}

5 个答案:

答案 0 :(得分:4)

您永远不会更新userNumber的值。将行userInput.nextInt();替换为userNumber=userInput.nextInt();

答案 1 :(得分:4)

更改此项(在循环结束时)

userInput.nextInt();

userNumber = userInput.nextInt();

由于您没有存储用户的输入,因此循环只会永久运行(并且您的测试显示将被跳过)。

答案 2 :(得分:4)

 userNumber = userInput.nextInt();

而不是

 userInput.nextInt();

答案 3 :(得分:4)

您忘了将 next int 分配给您的变量:

while (userNumber != rand) {

    if (userNumber > rand) {    
        System.out.println("Too high, guess again.");
        numOfGuesses++;

    } if (userNumber < rand) {
            System.out.print("Too low, guess again.");
            numOfGuesses++;
    }

    userNumber = userInput.nextInt(); // <-- here
}

答案 4 :(得分:2)

这是完整的工作代码。

请注意,如果您使用的是Java 1.6,那么应该使用try finally方法关闭扫描程序,您可以使用自动关闭接口 即。尝试(扫描仪userInput = new Scanner(System.in)){并省略最后全部。

public static void main(String[] args) {

    Scanner userInput = null; 

    try {

        System.out.println("Guess a number from 1 to 10.");

        userInput = new Scanner(System.in);

        int userNumber = userInput.nextInt();
        int rand = (int) (Math.random()*10) + 1;
        int numOfGuesses = 0;

        while (userNumber != rand) {

            if (userNumber > rand) {    
                System.out.println("Too high, guess again.");
                numOfGuesses++;

            } else {
                System.out.println("Too low, guess again.");
                numOfGuesses++;
            }

            userNumber = userInput.nextInt();
        }

        if (userNumber == rand) {
            System.out.println("That's the correct number!");
            numOfGuesses++;
            System.out.println("You made " + numOfGuesses + " guesses.");
        }
    }
    finally {
        if (userInput != null) {
            userInput.close();
        }
    }
}