当前位置: 首页 > 面试题库 >

在使用nextInt的同时使用try-catch语句,实现的正确方法是什么?

贺景铄
2023-03-14
问题内容

我正在尝试组成最紧凑的解决方案,以便仅使用nextInt()方法及其引发的排除错误从用户读取整数的方法……这是我现在拥有的代码:

Scanner sn = new Scanner(System.in);

    boolean inputNotNull = true;
    while (inputNotNull) {
        try {
            int number = sn.nextInt();

            System.out.printf("The number %d is power of 2: %b\n", number, isPowerOfTwo(number));
            if (number == 0) {
                inputNotNull = false;
            }
        }
        catch(InputMismatchException e) {
            System.err.println("Wrong input! Input only integer numbers please...");
    }

    }

因此,这应该做的是等待用户的 整数 。如果用户输入 0,则 结束程序。我的想法是尝试在用户使用
InputMismatchException
输入除整数以外的内容时排除这种情况(我知道捕获RuntimeException不是最佳实践)。引发异常时,将显示一条错误消息,并且程序返回while循环,并在没有任何反应的情况下再次请求输入。

我在这里使用的方法有一个缺陷,即当用户输入非整数值的内容时,程序会反复打印出错误消息,并永远循环播放。

如何避免这种情况?

作为附带问题,您将如何解决我要解决的问题?


问题答案:

无限循环的原因是,当您尝试输入输入时,请按Enter键,并且在调用nextInt时扫描程序将忽略多余的字符(输入)。因此,当您输入无效数字时,您将获得例外,并且扫描仪会再次看到输入字符,因为您没有消耗该字符,因此您永远不会离开它。

为了避免它,请在出现异常时尝试消耗该字符,例如:

catch (InputMismatchException e) {
    System.err.println("Wrong input! Input only integer numbers please...");
    sn.nextLine();
}

那应该可以解决您的问题。



 类似资料:
  • 在我必须进行的猜测游戏中,我需要包含一个带有两个catch子句的try-catch块(一个多catch块用于我的两个自定义异常:和,一个块用于)。 我试图在程序中创建条件来抛出自定义异常,因为我不知道它们如何正常工作的逻辑。我有编译错误,希望能帮助重新运行我的程序,以便它正确地实现try-catch块。 我的自定义异常类: 我的程序有编译错误:

  • 我有一个try/catch块,我已将其写入JetBrains网络StormIDE,它会给我一个错误。错误如下:“本地捕获的异常的‘抛出’/此检查报告任何JavaScript抛出语句的实例,其异常总是通过包含try语句来捕获。使用抛出语句作为“goto”来更改本地控制流可能会令人困惑。” 如果我将活动从捕获块放入尝试块的 if 块中,那么我将不需要尝试/捕获/最终。那么,除了条件语句(if)之外,你

  • 那么,回到问题上来,鉴于微软建议不要在新的开发中使用WebRequest而是使用只提供异步API的HttpClient,我该怎么办呢? 这是我正在做的一些伪代码... 如何实现ProcessStuff()?

  • 我在Java中所知的程度可以通过两种方式报告错误:返回值和异常。例如,下面的代码: 另一个观察结果是:如果取消对最后一条“return result”语句的注释,则会得到一条错误消息: 变量结果可能未初始化 ;如果对最后一条“return result”进行注释,则会得到一条错误消息: 缺少return语句 但是我已经在try子句中包含了return语句。

  • 问题内容: 即使在使用Java Swing一年以上之后,对我来说,它仍然像魔术一样。如何正确使用BufferStrategy,尤其是方法? 我想添加一个JFrame和一个Canvas,然后进行绘制。我还希望能够调整()画布的大小。每次我调整Canvas的大小时,似乎都会被浪费掉,或者变得毫无用处,因为在上使用并没有真正做任何事情。另外,它具有怪异的不确定性行为,我不知道如何正确同步它。 这就是我的

  • 问题内容: 我想在Linux上使用该机制。我希望我的应用程序知道何时更改了文件。能否请您提供给我一个示例,该怎么做? 问题答案: 文档(来自具有inotify的Monitor文件系统活动) 在C API 提供了三个系统调用来构建各种文件系统监视器: 在内核中创建子系统的实例,并在成功和失败时返回文件描述符。与其他系统调用一样,如果失败,请检查诊断。 顾名思义,它增加了一块 手表 。每个监视都必须提