方法必须返回int

use*_*007 1 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));    
    }
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 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;
Run Code Online (Sandbox Code Playgroud)


Kev*_*sox 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;
    }
Run Code Online (Sandbox Code Playgroud)