首页 > Java > java教程 > Java中处理InputMismatchException时如何避免无限循环?

Java中处理InputMismatchException时如何避免无限循环?

Linda Hamilton
发布: 2024-12-08 06:56:11
原创
1039 人浏览过

How to Avoid Infinite Loops When Handling InputMismatchException in Java?

try/catch with InputMismatchException:消除无限循环

遇到的问题

在从用户读取整数输入的程序中,利用 try/ catch 块来处理无效条目,当抛出 InputMismatchException 时(例如,当用户输入非整数字符)。

无限循环的原因

无限循环是由两个问题引起的:

  1. 缺少输入清理: 当抛出 InputMismatchException 时,输入的 token 不会从输入流中消耗。它保留在流中,导致后续读取尝试重复抛出异常。
  2. 一般异常处理: try/catch 的 catch 块当前设置为 catch(异常 e)。这种广泛的处理包括所有异常,这对于我们需要解决的 InputMismatchException 来说不够具体。

解决方案

要修复无限循环并确保正确处理 InputMismatchException,需要执行以下几个步骤可以采取:

  1. 消耗错误输入: 捕获 InputMismatchException 后,显式消耗输入令牌以防止其导致重复异常。这可以通过调用 input.next(); 来完成在 catch 块内。
  2. 使用特定的异常处理: 将 catch (Exception e) 替换为 catch (InputMismatchException e) 以仅专门处理 InputMismatchException。
  3. 实现验证:此外,建议使用scanner.hasNextInt()方法来验证是否在尝试读取之前,输入是一个整数。这可以帮助完全避免异常。

以下是修改后的代码以及建议的改进:

import java.util.InputMismatchException;
import java.util.Scanner;

public class Except {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean bError = true;
        int n1 = 0, n2 = 0, nQuotient = 0;

        do {
            try {
                System.out.println("Enter first num: ");
                n1 = input.nextInt();
                System.out.println("Enter second num: ");
                n2 = input.nextInt();
                nQuotient = n1/n2;
                bError = false;
            } 
            catch (InputMismatchException e) {
                System.out.println("Error!");
                input.next(); // Consume the erroneous input
            }
        } while (bError);

        System.out.printf("%d/%d = %d",n1,n2, nQuotient);
    }
}
登录后复制

以上是Java中处理InputMismatchException时如何避免无限循环?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板