java - 在 Java 中使用 .hasNextInt() 进行一些简单的异常处理有问题吗?

标签 java exception

我正在为与菜单上的数字相对应的食品菜单创建一个数组列表。其中大部分内容被遗漏:我的主要问题是,用户第一次不输入整数值时不会显示错误消息。按 Enter 键后,控制台上不会显示任何内容,但如果我再次输入非整数的内容,它将正常工作并显示错误消息。

编辑:我应该注意的其他事情是,在代码的前面,我使用相同的扫描仪对象,因此使用 .next() 清除它之前的值。

        orderArray = new String[length];
        menuDisplay(); 
        int item; //the item number that user must enter
        for(int i=1; i<=length;i++)
        {
            System.out.println("Please choose item #"+ i+": ");
            scan.next();
            while(!scan.hasNextInt()) //this while loop checks that an integer value has been entered
            {
                System.out.println("Please enter an integer value from the above menu.");
                scan.next();
            }

        }

最佳答案

hasNextInt 检查下一个 token ,而不是刚刚收到的 token ,因此始终在之前调用hasNextXxx() > 调用nextXxx()

您还希望实际获取整数值并将其分配给 item

像这样重新排列你的代码:

System.out.println("Please choose item #"+ i+": ");
while (!scan.hasNextInt()) //this while loop checks that an integer value has been entered
{
    System.out.println("Please enter an integer value from the above menu.");
    scan.next(); // skip bad token
}
item = scan.nextInt();

关于java - 在 Java 中使用 .hasNextInt() 进行一些简单的异常处理有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56402853/

相关文章:

java - SpringBoot-Firestore : Firebase app not initialize on tomcat server

java - 当 mongodb 更改流的恢复 token 过时时,java 驱动程序的行为是什么?

java.rmi.ServerException : RemoteException occurred in server thread (ClassNotFoundException) 异常

exception - 为什么 Perl 6 会为我的子集类型抛出 X::AdHoc 异常?

java - 断言 java 中私有(private)方法抛出异常的另一种方法

java - Exec 失败错误 - launch4j Maven 插件

java - 使用 Java 将 Java 对象插入 MongoDB 集合

java - HttpServerErrorException 是否可以返回 HttpStatus 类中枚举器指定的代码以外的 HttpStatus 代码?

java - 如何知道抛出了哪个异常

c# - ThreadAbortException 与 C# 中的优雅事件句柄退出