1

GCD(a, b) = GCD(b, r) r = a%b のユークリッド アルゴリズムを使用するプログラムを作成しています。メインメソッドが吐き出す整数を返す必要があるメソッドを作成しましたが、これを行うために呼び出すと、整数を返していないと表示されます。ここにコードがあります

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));    
    }
}
4

2 に答える 2

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;
于 2013-03-03T22:23:24.727 に答える
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;
    }
于 2013-03-03T22:23:36.867 に答える