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