第二个println
语句的逻辑错误导致我的代码中出现无限循环。
它在while循环中我理解导致它继续打印因为while测试是真的。分别使用48和18作为num1和num2,我得到GCD的正确答案是6.打印输出语句的位置是错误的,我无法弄清楚放在哪里。
我的代码找到两个整数的GCD,只要其中任何一个都不是负数。我使用了Euclid的方法。
感谢您的帮助!
import java.util.*;
public class Chapter5Lab_Problem1 {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.print("Type the first integer to find GCD");
int num1 = console.nextInt();
System.out.print("Type the second integer to find GCD ");
int num2 = console.nextInt();
gcd(num1,num2);
}
public static void gcd( int x, int y){
while( x >= 0 && y >= 0){
if( x == 0){
System.out.println("The GCD is " + y);
}
while( y != 0){
if( x > y){
x = x - y;
}else{
y = y - x;
}
}
System.out.println("The GCF is " + x);
}
}
}
答案 0 :(得分:1)
X和Y将始终为> = 0.它们在此算法中的最小值为0,因此第一个while语句的条件始终成立。请改为x > 0 && y > 0
。
答案 1 :(得分:1)
这是一个递归的答案。老师喜欢递归。当程序保持无限或太长时,递归是有风险的。
public static int GCD(int n1, int n2){
if(a==0 || b==0)
return a+b;
return GCD(n2, n1%n2)
}
如果你必须进行循环,那么这就是实现
int n3;
while(n != 0 || n2!= 0){
n3 = n2;
n2 = n1%n2;
n1 = n3;
}
return n1+n2;