2014-04-02 90 views
0

第二個println語句的邏輯錯誤導致我的代碼在下面的無限循環。找不到GCD方法的邏輯

它的內部while循環,我明白,導致它保持打印,因爲while測試是真實的。分別使用48和18作爲num1和num2,我得到了GCD的正確答案是6.打印輸出語句的位置是錯誤的,我不知道該把它放在哪裏。

只要不是負數,我的代碼就可以找到兩個整數的GCD。我用歐幾里德的方法。

感謝您的幫助!

import java.util.*; 

public class Chapter5Lab_Problem1 { 


    public static void main(String[] args) { 
    Scanner console = new Scanner(System.in); 
    System.out.print("Type the first integer to find GCD"); 
    int num1 = console.nextInt(); 
    System.out.print("Type the second integer to find GCD "); 
    int num2 = console.nextInt(); 
    gcd(num1,num2); 
    } 

    public static void gcd(int x, int y){ 
    while(x >= 0 && y >= 0){ 
     if(x == 0){ 
     System.out.println("The GCD is " + y); 
     } 
     while(y != 0){ 
     if(x > y){ 
      x = x - y; 
     }else{ 
      y = y - x; 
     } 

     } 
    System.out.println("The GCF is " + x); 
    } 
    } 
} 
+0

你爲什麼連續減去,而不是獲得國防部。 – thang

+0

不知道如何正確使用它。你能告訴我你將如何改變使用模數的方法嗎? – foodnliquor

回答

1

X和Y將始終> = 0。它在該算法中可以達到的最小值爲0,因此第一個while語句的條件總是成立。改爲嘗試x > 0 && y > 0

+0

謝謝! Sheesh總是那麼簡單。我正在瘋狂地試圖找到將SOP聲明放在哪裏。完全忽略了這一點。非常感謝,先生! – foodnliquor

1

這是一個遞歸答案。教師喜歡遞歸。當程序無限或者太長時,遞歸是有風險的。

public static int GCD(int n1, int n2){ 

    if(a==0 || b==0) 
    return a+b; 

    return GCD(n2, n1%n2) 
} 

如果你必須做一個循環,這裏是實現

int n3; 
while(n != 0 || n2!= 0){ 

    n3 = n2; 
    n2 = n1%n2; 
    n1 = n3; 
} 

return n1+n2;