我在运行一个java程序时遇到了问题,该程序计算两个数字的gcd,但出现try/catch异常
我试图毫无例外地计算gcd,但在我第一次执行代码时,它说我需要一个数字除以零的例外。当我添加try/catch异常时,它仍然不能按gcd计算。这是我的密码:我在运行一个java程序时遇到了问题,该程序计算两个数字的gcd,但出现try/catch异常,java,try-catch,Java,Try Catch,我试图毫无例外地计算gcd,但在我第一次执行代码时,它说我需要一个数字除以零的例外。当我添加try/catch异常时,它仍然不能按gcd计算。这是我的密码: import java.util.Scanner; public class methodone { public static void main(String[] args){ int factor1; int factor2; int r; Scanner inp
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");
}
编辑:这就是你想要的
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
}
已经有一个答案为您的问题提供了正确的算法。我认为在这里提出另一点很重要: 存在一个异常来处理异常情况。除零是你可以很容易地预测和检查的事情,也就是说,它不是一个例外。这意味着您的代码:不要捕获异常,而是在分割任何内容之前显式检查参数
这还可以避免由于另一个原因引发异常的非常烦人和不必要的情况,您仍然会提醒用户“不能被零除”。现在它只是无限次地打印消息“不能被零除”,而不是打印两个公因子。我需要成为野生循环之外的catch语句吗?虽然这段代码可以回答这个问题,提供有关此代码回答问题的原因和/或方式的附加上下文可提高其长期价值。如果您将代码格式化为更具可读性,并加入一些注释来解释您当前的思维过程,则您的问题更有可能得到回答。