Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我在运行一个java程序时遇到了问题,该程序计算两个数字的gcd,但出现try/catch异常_Java_Try Catch - Fatal编程技术网

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

我在运行一个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

我试图毫无例外地计算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");
        }
编辑:这就是你想要的

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语句吗?虽然这段代码可以回答这个问题,提供有关此代码回答问题的原因和/或方式的附加上下文可提高其长期价值。如果您将代码格式化为更具可读性,并加入一些注释来解释您当前的思维过程,则您的问题更有可能得到回答。