1

我正在用java做一个猜数字游戏。我希望应用程序在用户键入字符串而不是整数时打印一行。这就是我的代码的样子:

import java.util.Scanner;
import java.util.Random;
public class guessing_game {

    static Scanner input = new Scanner(System.in);
    static Random generator = new Random();
    public static void main(String[] args) {
        int number;
        number = generator.nextInt(20);
        System.out.println("Guess the number!");
        game(number);
    }
    public static void game(int number) {
        int inputStorage = 0;
        boolean b = true;
        while (b) {
            if (input.hasNextInt()) {
                inputStorage = input.nextInt();
                if (inputStorage == number) {
                    System.out.println("You've won!");
                    b = false;
                }
                else {
                    System.out.println("Wrong number! Try again.");
                }
            }
            else {
                System.out.println("Only numbers! Try again.");
            }
        }
    }
}

问题是当用户输入一个字符串,比如一个字母时,应用程序会显示:只有数字!再试一次。应用程序不会一次又一次地停止打印这一行。如何阻止这种情况?

4

3 回答 3

1
public static void game(int number) {
    while (true) {
        try{
            System.out.print("Guess a number: "); // prompt user to enter an int
            inputStorage = input.nextInt(); // read the number
            if (inputStorage == number) {
                System.out.println("You've won!");
                break;
            }
            else {
                System.out.println("Wrong number! Try again.");
            }
        } catch(final Exception ignored) { // input was not a number
            System.out.println("\nOnly numbers! Try again.");
            input.next(); // consume the invalid input
        }
    }
}

这将提示用户输入一个数字,并且只告诉用户如果没有提供一个数字,他们需要输入一个数字。

如果用户没有输入有效的数字,就会抛出异常并在catch语句中捕获。在这种情况下,输入的输入不是整数。

于 2013-07-10T08:56:02.720 回答
1

如果您插入的不是数字,那么(input.hasNextInt())将返回 false,因此您不会进入该 if 语句并进入最低的 else 语句。

我建议您改为阅读下一个字符串,如果该字符串不能转换为 int,那么您处理这种情况

于 2013-07-10T08:56:47.457 回答
0

使用 try catch 语句很简单

try {
   ...
} catch (NumberFormatException, ScannerException exception) {
   System.out.println("Input must be a number.");
}
于 2013-07-10T08:58:55.893 回答