2013-03-03 162 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

相關問題