Java 我的While循环不';即使满足条件,也不能结束
因此,作为一项任务,我试图构建一个Java 我的While循环不';即使满足条件,也不能结束,java,Java,因此,作为一项任务,我试图构建一个Collatz猜想程序。我的程序按预期工作,但唯一的问题是,它并没有在达到1时结束。相反,代码循环和程序似乎在自己的循环中从头开始。下面是我的代码。非常感谢您的帮助。谢谢大家! while (n!=1){ if ((n % 2) == 0) { n/=2; System.out.println(n); } if ((n % 2) > 0) { n*=3; n++; System.out.println(n
Collatz猜想
程序。我的程序按预期工作,但唯一的问题是,它并没有在达到1时结束。相反,代码循环和程序似乎在自己的循环中从头开始。下面是我的代码。非常感谢您的帮助。谢谢大家!
while (n!=1){
if ((n % 2) == 0) {
n/=2;
System.out.println(n);
}
if ((n % 2) > 0) {
n*=3;
n++;
System.out.println(n);
}
n = n;
}
您在每次迭代中都运行这两个条件,因此即使第一个条件更新为
n
到1
,以下条件也会立即将其值更改为再次大于1
如果第一个条件为false,则只应运行第二个条件的主体,这意味着您可以将第二个条件转换为else
子句:
if ((n % 2) == 0) {
n/=2;
System.out.println(n);
} else {
n*=3;
n++;
System.out.println(n);
}
例如:
假设
n==2
-第一个条件为true,它将n
从2
修改为1
。现在,在同一次迭代中,第二个条件变为真,n
乘以3
,再乘以1
,因此循环不会结束。您应该这样做,出现此问题的原因是您在每种情况下都更新了n
,循环继续运行,这就是程序未运行的原因
int m=0;
while (n!=1){
if ((n % 2) == 0) {
m=n/2;
System.out.println(m);
}
if ((n % 2) > 0) {
m=n*3;
m++;
System.out.println(m);
}
n = m;
}
将第二个
if
设置为else if