即使满足条件,我的While循环也不会结束

时间:2018-10-28 07:24:15

标签: java

因此,作为一项任务,我正在尝试构建一个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;
}

2 个答案:

答案 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,它将n2修改为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;
 }