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

捕获异常( 字符到整数 ) 导致循环无限 [重复]

闻人志
2023-03-14
import java.util.InputMismatchException;  import java.util.Scanner;

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean nvalid = true; // boolean to get out of do while when user input number
        int a = 0;
        System.out.println("enter number a");
        do {
            try {
                a = sc.nextInt();
                nvalid = true;
            } catch (InputMismatchException e) {
                System.out.println("please enter number only");
                nvalid = false; //make the boolean false so do while will let user enter number again.
            }
        } while (nvalid == false);
        System.out.println("out of do while");
    }

嗨,我正在使用netbean来练习java异常,我想在用户未输入数字时捕获异常。

上述代码导致无限循环,并阻止用户输入变量< code>a的值。

共有1个答案

鲜于河
2023-03-14

你成功地捕捉到了异常。这不是问题所在。

真正的问题是由捕获异常之前发生的事情引起的。如果< code>nextInt()不能解析一个整数,它会将它所查看的所有字符放回原处。

所以。。。当它再次循环时,您的代码正在尝试读取与以前完全相同的字符。那会失败,失败,失败...

解决方案:在要求用户重试之前,使用nextLine()跳过“错误输入”。您可以将其放在异常的catch块中。

注意这是一个坏主意/坏习惯:

  .... while (nvalid == false);

您不应该使用< code>==来测试布尔值是真还是假。请改为这样做:

  .... while (!nvalid);
 类似资料:
  • 我希望程序在捕获异常时重新执行 while 循环 - 异常正在接收文本输入。相反,它继续使用下面的代码进行一段时间循环,我希望它再次要求用户输入。 输出:

  • 我的期望: 如果用户输入的Int不在正确的范围内,程序将给他另一次机会,直到用户给出正确的类型。 所以,我需要一个块。但我有一个无限循环。 我的代码: 我读到: 重置. nextLine()扫描仪 使用扫描仪。扫描仪后面的nextLine()。nextInt() nextInt()的扫描仪错误 扫描仪在使用next()或nextFoo()后跳过nextLine()? 如何使用java.util.扫

  • 我试图从用户那里获取输入,为2D矿山的weeper游戏构建网格,当我将有效值传递给扫描器时,过程非常顺利,但当我尝试无效的东西时,它会经历无限循环,即使try块是用资源尝试,它应该用每一个新的尝试关闭扫描器,当它无限地打印捕获上的字符串时,它听起来不会关闭它

  • 我想要我的。htaccess文件,如果任何作为子域条目的通配符出现在浏览器上,则重定向到某个页面。i、 我想要 山姆,xyz。通用域名格式 重定向到 山姆,xyz。com/view。php?id=sam 我使用以下重写规则重定向。 重新启动引擎 重写cond%{HTTP_HOST}^www.xyz。com[NC] 重写cond%{HTTP_HOST}^([^.])。xyz。通用域名格式 重写 ^(

  • 我对react钩子和效果有点陌生,在使用useEffect时遇到了问题 上面的代码是我构建的useEffect,用于使用axios获取数据库中的所有数据,并且我将所有数据放在一个称为reports的状态中。 但是当我console.log报告时,它会导致无限循环。我不知道为什么? 让我给你看一个我做的简单动作。 我正在做一个按钮,当它被点击时,报告的状态(按id)将被更新。 这是该州报告结构的样本

  • 我在使用useEffect时搜索了很多关于无限循环的帖子,但仍然没有找到答案 在useEffect中,我试图调用get accounts api,当然,我放置了一个空数组,因为我只希望它在渲染后运行一次。但目前我喜欢添加“addAccount”功能。因此,如果我按下add按钮,它就会发送一个post请求。这里是一个问题,我想检查值是否已更改,因此我将值放入第二个参数,即空数组,它会导致无限循环。但