Java:使用InputMismatchException的无限环回错误

Java:使用InputMismatchException的无限环回错误,java,try-catch,infinite-loop,inputmismatchexception,Java,Try Catch,Infinite Loop,Inputmismatchexception,所以我正在重新编写我的java初学者“除法”程序,其中必须对用户输入的两个整数进行除法。我的问题是当输入字母表或符号时,我得到一个无限循环。捕获似乎工作正常(输出读取错误),但在这之后就是一个损失。这是代码。任何帮助都将不胜感激 public class Divide { public void Divide (int num1, int num2) throws NegativeNumberException { } public static void main (

所以我正在重新编写我的java初学者“除法”程序,其中必须对用户输入的两个整数进行除法。我的问题是当输入字母表或符号时,我得到一个无限循环。捕获似乎工作正常(输出读取错误),但在这之后就是一个损失。这是代码。任何帮助都将不胜感激

 public class Divide
{  
    public void Divide (int num1, int num2) throws NegativeNumberException {

    }

public static void main (String[] args) throws ArithmeticException, InputMismatchException
    {

   int num1 = 0;
   int num2 = 0;
   double ratio;
   Scanner scan = new Scanner(System.in);
   int looper = 0; //using variable for do-while loop

   do { //re-runs code if input error
   try {
   System.out.println("Let's divide some numbers!"); 
   System.out.print("Enter your first whole number: ");
   num1 = scan.nextInt();
   System.out.print("Enter your second whole number: ");
   num2 = scan.nextInt();

    if (num1 < 0 || num2 < 0) {
           throw new NegativeNumberException("No Negative Numbers Allowed.");
        }
    else if (num1 == 0 || num2 == 0) {
            throw new ArithmeticException();
    }

   } 

    catch(InputMismatchException a) {
     System.out.println("Wrong input: " + a.getMessage());
     continue;

    }

   catch(ArithmeticException ae){
     System.out.println("Error:"+ ae.getMessage());
     System.out.println("No zeroes!");
     continue;
     }

   catch (Exception c) { 
     System.out.println("This won't work." + c.getMessage());
     scan.nextLine();
     continue;

    }

    ratio = (double)num1 / num2;
   System.out.println("The answer is: " + ratio);
    looper = 1; //when complete, this change will end program

    }while (looper == 0);
}
}
公共类划分
{  
公共void Divide(int num1,int num2)抛出NegativeEnumberException{
}
publicstaticvoidmain(String[]args)抛出算术异常,InputMismatchException
{
int num1=0;
int num2=0;
双倍比率;
扫描仪扫描=新扫描仪(System.in);
int looper=0;//对do while循环使用变量
如果输入错误,是否重新运行代码{//
试一试{
System.out.println(“让我们划分一些数字吧!”);
System.out.print(“输入第一个整数:”);
num1=scan.nextInt();
System.out.print(“输入第二个整数:”);
num2=scan.nextInt();
如果(num1<0 | | num2<0){
抛出新的NegativeEnumberException(“不允许使用负数”);
}
否则如果(num1==0 | | num2==0){
抛出新的算术异常();
}
} 
捕获(输入不匹配异常a){
System.out.println(“输入错误:+a.getMessage());
继续;
}
捕获(算术异常ae){
System.out.println(“错误:+ae.getMessage());
System.out.println(“无零!”);
继续;
}
捕获(例外c){
System.out.println(“这行不通。”+c.getMessage());
scan.nextLine();
继续;
}
比率=(双)num1/num2;
System.out.println(“答案是:“+比率”);
looper=1;//完成后,此更改将结束程序
}而(活套==0);
}
}

scan.nextLine()不会在输入与整数不匹配时丢弃输入,因此您需要使用scan.nextLine()来使用它。抱歉,我不知道您在说什么。初始输入将是int类型,catch中的调用不会改变任何内容,即使在输入之后也是如此nextLine@MichaelLewis在
Exception
catch块中只有
nextLine()
。在
输入不匹配异常
(当输入不是
int
)的情况下,您不会使用非
int
的输入。它最终单击。谢谢大家