Java 方法必须返回int
我正在编写一个使用欧几里德算法的程序,该算法的GCD(a,b)=GCD(b,r)r=a%b。我写了一个方法,它应该返回一个整数,以便主方法吐出,但是当我调用它时,它说它没有返回整数。这是密码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
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来说是一个奇怪的值。@JBNizetGCD(0,0)
是0。Luchian,你应该初始化ret=a代码>,否则你会用a>1的gcd(a,0)
得到错误的结果。我不是数学专家,但我总是被告知,无论分子是什么,除以0没有任何意义。计算0和0的GCD没有任何意义,应该抛出IllegalArgumentException。不过,我同意ret应该是一个很好的例子,我不会再遇到这种情况。请参阅以获取简短(非常简短)的大纲。