我试图在没有异常的情况下计算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,而是在划分任何内容之前显式检查参数。
这也将避免非常恼人和不必要的情况,即由于其他原因引发异常,并且您仍然提醒用户"不能除以零"。