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 回答