为了账号安全,请及时绑定邮箱和手机立即绑定

如何捕获多个异常并循环,直到我得到有效的输入?

如何捕获多个异常并循环,直到我得到有效的输入?

30秒到达战场 2022-09-28 16:24:45
我必须捕获3个异常并循环,直到输入有效的输入。现在,我的程序在输入有效输入时结束,但只是连续循环无效输入。它永远不会捕获异常。如果我取出循环并输入一个“m”,它会捕获算术异常,但会打印输入不匹配“仅数字”的错误消息// Get input from user and perform integer divsion.do{    try{        System.out.print("Please enter a positive value for the numerator: ");        numerator = keyboard.nextInt();                System.out.print("Please enter a positive value for the denominator: ");        denominator = keyboard.nextInt();    }     catch(InputMismatchException e){          System.out.println("Enter only numbers.");    }    catch(NegativeValueException e){          System.out.println("no negative values.");    }    catch(ArithmeticException e){          System.out.println("Division by zero.");    }    if (numerator >=0 && denominator >= 0){        quotient = numerator / denominator;    }else if(numerator<0 && denominator <0){        throw new NegativeValueException();    }else        invalidInput = true;    System.out.println();    System.out.print("The result of integer division is: ");    System.out.println(quotient);    System.out.println();}while (invalidInput);  我只需要捕获异常并让它打印出异常和循环的相应错误消息,直到输入有效输入。如果没有循环,它将捕获负值,但不会打印错误并以构建失败结束。任何帮助将不胜感激!
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超7个赞

既然你已经表现出了努力,但你似乎也是Java的新手,我正在尝试纠正你的代码。通常,不建议用于这种低水平的校正。


我们需要在捕获它之前抛出一个异常 - 这就是你周围的情况 - 。NegativeValueException


我假设变量 &类型 - , &是声明和定义的。NegativeValueExceptioninvalidInputkeyboard


我已经提供了示例代码,对您提出的代码进行了最小的更改,尽管您提出的问题可以通过更好的代码来解决。


do{

        invalidInput=false;

        try{


        System.out.print("Please enter a positive value for the numerator: ");

        int numerator = keyboard.nextInt();


        System.out.print("Please enter a positive value for the denominator: ");

        int denominator = keyboard.nextInt();

        if(numerator<0 && denominator <0){

           throw new NegativeValueException();

         }else if (numerator >=0 && denominator >= 0){

        int quotient = numerator / denominator;

        System.out.println();

        System.out.print("The result of integer division is: ");

        System.out.println(quotient);

        System.out.println();

        }

        } catch(InputMismatchException e){

            System.out.println("Enter only numbers.");

            invalidInput = true;

        }catch(NegativeValueException e){

            System.out.println("no negative values.");

            invalidInput = true;

        }catch(ArithmeticException e){

            System.out.println("Division by zero.");

            invalidInput = true;

        }

        }while (invalidInput);  


查看完整回答
反对 回复 2022-09-28
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

Scanner s = new Scanner(System.in);

do {

    try {

        System.out.print("Please enter a positive value for the numerator: ");

        int numerator = s.nextInt();

        System.out.print("Please enter a positive value for the denominator: ");

        int denominator = s.nextInt();

        int quotient = numerator / denominator;

    } catch (InputMismatchException e) {

        System.out.println("InputMismatchException " + e);

        System.exit(0);



    } catch (ArithmeticException e) {

        System.out.println("ArithmeticException " + e);

        System.exit(0);

    } catch (Exception e) {

        System.out.println("NegativeValueException " + e);

        System.exit(0);

    }

} while (true);


查看完整回答
反对 回复 2022-09-28
?
HUX布斯

TA贡献1876条经验 获得超6个赞

实际上,问题是你在外面做数学运算,比如说如果它抛出一个程序通过这些检查:try-blockexception


if (numerator >=0 && denominator >= 0) //  false as there was exception

else if(numerator<0 && denominator <0)  // false as there was exception

else

    invalidInput = true; //gets executed

执行每个异常并因此中断 .将数学移入内部invalidInput = truedo-while looptry-block


试试这个代码:


do

{

    try

    {

        System.out.print("Please enter a positive value for the numerator: ");

        numerator = keyboard.nextInt();

        System.out.print("Please enter a positive value for the denominator: ");

        denominator = keyboard.nextInt();

        if (numerator >=0 && denominator >= 0)

        {

            quotient = numerator / denominator;

        }

        else if(numerator<0 && denominator <0)

        {

            throw new NegativeValueException();

        }

        else

            invalidInput = true;


        System.out.println();

        System.out.print("The result of integer division is: ");

        System.out.println(quotient);

        System.out.println();

    } 

    catch(InputMismatchException e)

    {

        System.out.println("Enter only numbers.");

    }

    catch(NegativeValueException e)

    {

        System.out.println("no negative values.");

    }

    catch(ArithmeticException e)

    {

        System.out.println("Division by zero.");

    }


}while (invalidInput); 


查看完整回答
反对 回复 2022-09-28
  • 3 回答
  • 0 关注
  • 51 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信