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

Java在输入失配异常后不要求重新输入

解鸿运
2023-03-14

我有一个示例程序,用于为航空公司注册人员。

在Registration类的selectSeats方法中,我有一个try-catch块,其中catch语句应该捕获InputMissMatchException,以防用户输入非数值。

但是,重新输入操作没有发生,因此,当发生异常时,程序只是抛出错误消息并继续到末尾(这会导致意外结果)

这就是有问题的方法

    public void seleccionarAsiento() {
            boolean malaSeleccion = true;
            do{
                try{

                    System.out.println("\n\n Digite el número de asiento del 0 hasta el 20");
                    while (malaSeleccion) {

                        //Selección del hashSet correspondiente a cada vuelo mediante uso de la variable polimorfica "asientos".
                        if(this.destino.equals("Nicaragua")) {
                            asientos = asientosNCA;
                        }
                        else if (this.destino.equals("Panama") || this.destino.equals("Panamá")) {
                            asientos = asientosPNA;
                        }

                        this.asiento = input.nextInt(); //The part causing the issue

                        if(this.asiento < 0 || this.asiento > 20) {
                            System.out.println("\nSelect a seat between 0 and 20.");

                        } else if (asientos.contains(this.asiento)) {
                            System.out.println("\nSeat taken, select another one.");
                        } else if (this.asiento >= 0 && this.asiento <= 20 && asientos.contains(this.asiento) == false) {
                            asientos.add(this.asiento);
                            continuarCiclo = false;
                            malaSeleccion = false;
                        }
                    }            

                } // Fin de bloque try

                //Bloque catch para prevenir un input no numerico.
                catch (InputMismatchException inputMismatchException) {
                    System.out.println("Not numeric value, try again.");
                    input.nextLine();

                }

In case this is relevant, since I'm not sure if this could be related to a problem with Inheritance (but I doubt it because the exception is being caught)

This is the start of the class where that method is, and an extension to Exception I added.

    public class RegistroCompra {

        Scanner input = new Scanner(System.in);
        private String destino;
        private int asiento;
        private boolean continuarCiclo = true;


        public static HashSet<Integer> asientosNCA = new HashSet(21);
        public static HashSet<Integer> asientosPNA = new HashSet(21);

        HashSet<Integer> asientos = null;

        class ExcepcionRegistro extends Exception {
            ExcepcionRegistro(String s) {
                super(s);
            }
        }

} while (continuarCiclo == true); // Fin de bloque Do

编辑:我通过使方法在catch块中递归来解决这个问题。因此,如果它捕获了inputmismatch异常(因为它正在捕获它),它会使用input.nextLine()从无效输入中清除缓冲区,然后,函数再次调用自己以重新启动选择过程。

共有2个答案

邢晗日
2023-03-14

该异常可能不是 InputMatchException 的实例。您可以尝试添加异常 e 来查看真正的异常。


catch (InputMismatchException inputMismatchException) {
  System.out.println("Este no es un valor númerico, intente de nuevo.");
  input.nextLine();
}
catch (Exception e) {
  exception.printStackTrace()
  input.nextLine();
}

储阳曦
2023-03-14

按以下步骤进行:

public void selectSeat() {
    boolean valid = true;
    do {
        System.out.println("Enter the seat number from 0 to 20");
        // ...
        try {
            this.asient = Integer.parseInt(input.nextLine());
            // ...
        } catch (InputMismatchException inputMismatchException) {
            System.out.println("This is not a numerical value, try again.");
            valid = false;
        }
    } while (!valid);
}
 类似资料:
  • (更新的代码)无论出于什么原因,InputMismatchException的catch块无法正常工作。当代码抛出此错误时,catch块不会捕获它。有人知道为什么会这样吗?

  • 我有这个代码,我想捕捉字母异常,但它一直有以下错误: 这是我的代码:

  • 编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 (更新的代码)无论出于什么原因,InputMismatchException的catch块无法正常工作。当代码抛出此错误时,catch块不会捕获它。有人知道为什么会这样吗?

  • HTTP状态500-请求处理失败;嵌套异常是org.springframework.dao.dataIntegrityViolationException:键“groups_groupid”的重复条目“2”;SQL[N/A];约束[null];嵌套异常是org.hibernate.exception.constraintViolationException:键“groups_groupid”的重复

  • 我正在为一堂课做家庭作业。你必须计算这个月的工资。每次我尝试运行它时,它总是这样说:我如何修复它?线程“main”java.util.InputMismatchException中的异常 java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(扫描仪.java:1485) java.util.Scanner.ne

  • 有点麻烦。 基本上,我得到了输入行 5,4,5 8,7=6,3 3,2 9,6 4,3=7,6=9,8=5,5 7,8 6,5 6,4