Java:在while循环中嵌入if / else语句

时间:2015-09-30 16:29:08

标签: java eclipse if-statement while-loop nested

这是我在StackOverflow中的第一个问题,所以我希望你能原谅我在设置这篇文章时会遇到的许多错误.... 我的问题如下:这段代码应该生成一个随机数,显示给用户(为了帮助我猜测它发出太多次尝试......这应该只是一个练习),要求用户猜一个数字在0到50之间,检查输入是否为整数,如果用户猜到了正确的数字,请打印"是,数字为.." 。 但是,如果用户对一个字母或任何不是数字的数字进行数字处理,则if / else循环变得疯狂并且程序开始打印"选择0到50之间的数字:请插入0到50之间的数字,而不是一封信"停止... 可以帮助我吗?

package methods;

import java.util.Scanner;

public class Methods {

    static int randomNumber;
    static Scanner userInput = new Scanner(System.in);

    public static void main(String[] args) {

        System.out.println(getRandomNum());

        int guessResult = 1;
        int randomGuess = 0;

        while (guessResult != -1) {
            System.out.print("Choose a number between 0 and 50: ");

            if (userInput.hasNextInt()) {
                randomGuess = userInput.nextInt();
                guessResult = checkGuess(randomGuess);
            } else {

                System.out.println("Please insert  a number, not  a letter");
            }

        }

        System.out.println("Yes, the number is " + randomGuess);
    }

    public static int getRandomNum() {

        randomNumber = (int) (Math.random() * 51);
        return randomNumber;

    }

    public static int checkGuess(int guess) {

        if (guess == randomNumber) {

            return -1;
        } else {

            return guess;

        }
    }
}

1 个答案:

答案 0 :(得分:1)

您允许用户输入一封信(意图给出错误信息,但您只能调用scanner.nextInt)

您应该将输入作为字符串读取,然后解析它。

    String input = null;
    while (guessResult != -1) {
        System.out.print("Choose a number between 0 and 50: ");

        input = sc.next();
        try
        {
            randomGuess = Integer.parseInt(input);
            checkGuess(randomGuess);
        } catch(NumberFormatException ex)
        {
            System.out.println("Please insert  a number, not  a letter");
        }

    }