因此,作为一项任务,我正在尝试构建一个Collatz Conjecture
程序。我的程序按预期工作,但是唯一的问题是,当它达到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;
}
答案 0 :(得分:3)
您在每次迭代中都同时运行两个条件,因此,即使第一个条件将n
更新为1
,随后的条件也会立即将其值更改为再次大于1
。 / p>
仅当第一个条件为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
。现在,在同一迭代中,第二个条件变为true,n
乘以3
并递增1
,因此循环不会结束。
答案 1 :(得分:0)
您应该这样做,因为在每种情况下都更新了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;
}