2013-03-03 119 views
1

我正在编写一个使用GCD(a,b)= GCD(b,r)r = a%b的Euclids算法的程序。我写了一个方法,应该返回一个整数的主要方法吐出来,但是当我要求它做到这一点时,它说它没有返回一个整数。这里是代码方法必须返回int

public class Euclid { 

    public static int GCD(int a, int b) 
    { 
     while (b != 0) 
     { 
      int r = a%b; 
      System.out.println("(" +a+ "," +b+ ")"); 
      b = r; 
      a = b; 
      if(b == 0) 
      { 
       return a; 
      } 
     } 
    } 
    public static void main(String[] args) 
    { 
     System.out.println(GCD(36, 20));  
    } 
} 
+1

此错误代码是错误的。 b = r; a = b也导致a = r。你可能意思是a = b; b = r。 – 2013-03-03 22:26:11

+0

谢谢我刚刚意识到我发布后 – user1940007 2013-03-03 22:32:54

回答

5

在代码中,如果b == 0它不会返回int或与此有关的任何价值。您必须处理这种情况,很可能通过指定默认返回值。

public static int GCD(int a, int b) 
    { 
     while (b != 0) 
     { 
      int r = a%b; 
      System.out.println("(" +a+ "," +b+ ")"); 
      b = r; 
      a = b; 
      if(b == 0) 
      { 
       return a; 
      } 
     } 
     return 0; 
    } 
5

编译器不能告诉你的方法最终将达到b == 0条件并返回。你可以把它重构为:

int ret = 1; 
    while (b != 0) 
    { 
     int r = a%b; 
     System.out.println("(" +a+ "," +b+ ")"); 
     b = r; 
     a = b; 
     if(b == 0) 
     { 
      ret = a; 
      break; 
     } 
    } 
    return ret; 
+0

是真的。我没有真正读过算法。只是想:0对于GCD来说是一个奇怪的值。 – 2013-03-03 22:29:08

+0

@JBNizet'gcd(0,0)'是0. Luchian,你应该初始化'ret = a;',否则''a> 1'会得到'gcd(a,0)'的错误结果。 – 2013-03-03 22:37:33

+0

我不是数学专家,但我总是被告知除以0除以分子无论如何都没有任何意义。计算0和0的GCD没有任何意义,应抛出IllegalArgumentException。但我同意ret应该是a。 – 2013-03-03 22:42:16

相关问题