Java 方法必须返回int

Java 方法必须返回int,java,while-loop,greatest-common-divisor,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.prin

我正在编写一个使用欧几里德算法的程序,该算法的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));    
    }
}

编译器无法判断您的方法最终将达到
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;

编译器无法判断您的方法最终将达到
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;

在代码中,如果
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;
    }

在代码中,如果
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;
    }

这个代码是错误的。b=r;a=b也会导致a=r。你的意思可能是a=b;谢谢你,我刚意识到在我发布它之后,这个代码是错的。b=r;a=b也会导致a=r。你的意思可能是a=b;谢谢你,在我把它贴出来之后,我才意识到这一点。我没有真正阅读算法。刚刚想到:0对于GCD来说是一个奇怪的值。@JBNizet
GCD(0,0)
是0。Luchian,你应该初始化
ret=a,否则你会用
a>1的
gcd(a,0)
得到错误的结果。我不是数学专家,但我总是被告知,无论分子是什么,除以0没有任何意义。计算0和0的GCD没有任何意义,应该抛出IllegalArgumentException。不过,我同意ret应该是一个很好的例子,我不会再遇到这种情况。请参阅以获取简短(非常简短)的大纲。正确。我没有真正阅读算法。刚刚想到:0对于GCD来说是一个奇怪的值。@JBNizet
GCD(0,0)
是0。Luchian,你应该初始化
ret=a,否则你会用
a>1的
gcd(a,0)
得到错误的结果。我不是数学专家,但我总是被告知,无论分子是什么,除以0没有任何意义。计算0和0的GCD没有任何意义,应该抛出IllegalArgumentException。不过,我同意ret应该是一个很好的例子,我不会再遇到这种情况。请参阅以获取简短(非常简短)的大纲。