Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无效类型文本将继续打印_Java_Repeat - Fatal编程技术网

Java 无效类型文本将继续打印

Java 无效类型文本将继续打印,java,repeat,Java,Repeat,我正在用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

我正在用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.");
            }
        }
    }
}
问题是,当用户键入字符串(如字母)时,应用程序显示:只有数字!再试一次。应用程序不会一次又一次地停止打印这一行。如何阻止这一切

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
语句中捕获。在这种情况下,输入的输入不是整数。

如果插入的内容不是数字,则
(input.hasNextInt())
将返回false,因此您不会进入If语句,而进入最低的else语句


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

使用try-catch语句,这很简单

try {
   ...
} catch (NumberFormatException, ScannerException exception) {
   System.out.println("Input must be a number.");
}

我的问题是,我的应用程序不会停止打印“只打印数字!再试一次。”是的,但每毫秒就会出现一行新的数字!我已经成功了。我将输入转换为字符串,然后将其解析为整数。如果不可能,catch/try语句将只显示数字。但我不知道为什么那个信息只出现一次。好吧,我成功了。我创建了一个新字符串,并将该字符串设置为用户键入的任何内容。然后我使用了这一行:
intinputstorage1=Integer.parseInt(inputString)。然后通过使用catch/try和if语句,我让它工作起来。你能解释一下为什么我这样做的时候,它只显示一次“只有数字”吗?因为当我只使用整数时,我的应用程序不会停止打印行。我的新申请: