我在运行一个java程序时遇到问题,该程序计算带有try/catch异常的两个数字的gcd



我试图在没有异常的情况下计算gcd,但在我第一次执行代码时,它说我需要一个被零整除的数字的异常。当我添加try/catch异常时,它仍然不会通过gcd进行计算。这是我的代码:

import java.util.Scanner;
public class methodone {
    public static void main(String[] args){
        int factor1;
        int factor2;
        int r;
        Scanner input=new Scanner(System.in);
        System.out.println("Enter 1st factor");
        factor1=input.nextInt();
        System.out.println("Enter 2nd factor");
        factor2=input.nextInt();
        while(factor1!=0){
            try{  
                r = factor1 % factor2;
                factor1 = factor2;
                factor2 = r;
            }
            catch{
                System.out.println("can't divide by zero");
            }
        }
        System.out.println("GCD is"+factor1);
    }
}

我做错了什么

        try{  
            r = factor1 % factor2;
            factor1 = factor2;
            factor2 = r;
        }catch (Exception e){
            System.out.println("can't divide by zero");
        }

edit:这是你想要的。

static int gcd(int a, int b)
{
  while(a!=0 && b!=0) // until either one of them is 0
  {
     int c = b;
     b = a%b;
     a = c;
  }
  return a+b; // either one is 0, so return the non-zero value
}

已经有一个答案为您的问题提供了正确的算法。我认为重要的是要在这里提出另一点:异常是用来处理异常情况的。除以零是你可以很容易地预测和检查的事情,也就是说,它不是例外。这对您的代码来说意味着:不要捕获Exception,而是在划分任何内容之前显式检查参数。

这也将避免非常恼人和不必要的情况,即由于其他原因引发异常,并且您仍然提醒用户"不能除以零"。

最新更新