如图
这是一个求最大公约数的方法,我想问的是,如果给if语句后面加上括号,就是像我图片中那样的
public static int gcd(int n1,int n2){
int gcd=1;
int k=2;
while (k<=n1&&k<=n2) {
if (n1%k==0&&n2%k==0)
{ //看到有套嵌的循环不要跳。。。仔细看。。。
gcd=k;
k++;
//continue;
}
System.out.println("11111");
System.out.println(gcd);
}
return gcd;
}
如果给if加上了{},为啥这个while循环跳不出来?
请注意加上大括号后意味着只有当n1,n2对k取余都为0的情况下k值才会改变,我们以k=2,n1为大于2的奇数来讲,那么n1%k==0永远不可能成立,意味着k只能等于2,进了这个循环便没有退出条件因此构成死循环。当你不加大括号时,if的执行体是 gcd=k;这一条语句, k++;不属于循环体,因此每次迭代k值都会增大,直到退出循环。
图片和后面的代码一样啊?? 是我眼花了~~?
有没有语法错误提示?加上{}后应该在里面加一个;,这样if会执行空语句,然后接着执行后边的,试试?
if会执行空语句k n1 n2 的 值都没有发生改变 。然后就是一值输出,自然是死循环了
可以试想一下if里面是flase的时候,if后面的代码块并没有执行,也就是k值没有变化。循环一直为真。然后就是死循环了。
int getGCD(int x, int y) {
while(y!=0){
y=x+y;
x=y-x;
y=(y-x)%x;
}
return x;
}