方法必须返回int

时间:2013-03-03 22:21:14

标签: java while-loop greatest-common-divisor

我正在编写一个使用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));    
    }
}

2 个答案:

答案 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;

答案 1 :(得分: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;
    }