当前位置: 首页 > 知识库问答 >
问题:

在输入验证期间使用扫描仪类测试空白输入

陆子默
2023-03-14

我需要让用户从控制台输入一个非零的正整数,我将在程序中用它作为产品编号。

如果我输入任何非整数值,程序会正确地进入while循环。

如果我输入0或负整数,程序会正确抛出异常(我在其他地方捕获和处理)。

当我只是按回车键(或行尾字符)时,程序似乎只是将控制台放在另一行。我希望它进入 while 循环以显示错误消息。我认为原因是NextInt()将等到令牌是非行尾字符输入。

private static void validateProductNumber() throws InvalidProductNumberException { 
    Scanner keyboard = new Scanner(System.in);
    int number;
    while(!keyboard.hasNextInt()) { 
        System.out.println("Number must be an integer. Try again. ");
        System.out.println("Enter a new number: ");
        keyboard.next(); 
    }
    number = keyboard.nextInt();
    if (number <= 0)
        throw new InvalidProductNumberException();
    newNumber = number;
}

是否有另一种方法可以使用 Scanner 类实现输入验证,以便它适用于所有情况?

共有1个答案

长孙文栋
2023-03-14

您可以按如下方式更改循环:

while(true) {        
    try {
        System.out.println("Enter a new number: ");
        //read the line and parse it
        number = Integer.parseInt(keyboard.nextLine());
        break; //break the loop if the input is a valid integer
    } catch(Exception ex) {
        //print the error message if the input is incorrect
        System.out.println("Number must be an integer. Try again. ");
    }
}
if (number <= 0)
//...
 类似资料:
  • 我很难想出如何正确使用扫描仪来验证用户输入。例如,程序需要用户输入int,用户只能输入正数,如果用户输入“apple”、“delicious apple”或负数,问题将显示错误消息。我尝试了下面的代码,然后我发现了一个令人不安的问题,“那不是一个数字!”我不知道是什么引起了这些问题。。。。 我在“number=sc.nextInt()”下面加了一行代码,意外地解决了这个问题,现在我的代码变成: 这

  • 从指定范围(0,20)内且为int的用户处获取有效整数的最佳方法是什么。如果他们输入了无效的整数打印输出错误。 我在想这样的事情: 这是正确的还是有更好的方法?

  • 问题内容: 我目前正在创建第一个在控制台中执行的游戏。 我被要求验证可以用简单代码完成的输入。目标是输入,然后验证该数字是否为整数并且在1-4的范围内。如果可能,应使用基本算法解决该问题。 问题是它不会给我我想要的结果。当我输入字符串时,它可以工作,但是会在我输入的每个数字(包括范围内的数字)上循环播放。有人知道为什么吗? 问题答案: 因为你实例是,但从来没有给用户一个机会来改变这种情况,前两个条

  • 问题内容: 我必须在 while 循环中显示Scanner输入:用户必须插入输入,直到他写下“ quit”为止。因此,我必须验证每个输入以检查他是否写出“ quit”。我怎样才能做到这一点? 这行不通。如何验证每个用户的输入? 问题答案: 问题是nextLine() “使该扫描程序前进到当前行之外”。因此,当您调用该条件并且不保存返回值时,您将丢失用户输入的那一行。对第3行的调用返回另一行。 您可

  • 对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?

  • 我让一个用户输入一个整数字符串,然后将它们添加到ArrayList,但我需要验证每个条目是否为正整数。我尝试了do/while循环、嵌套while环,而使用嵌套if和每个循环都会遇到自己的一组问题。 作为我当前设置的示例:用户输入例如:1 2 3 4 pageVar是我的扫描仪,pageRef是我的ArrayList 运行这个my while在等待更多的输入时被卡住了,我不知道如何打破它。