我尝试使用 while
循环实现 Collatz 序列,但我无法在 1 处停止序列。代码继续。我尝试了所有的可能性,但我想不出一个解决方案。
import java.util.Scanner;
public class cs{
public static void main(String[] args)throws Exception{
System.out.println("Starting number: ");
Scanner s = new Scanner(System.in);
int a = s.nextInt();
System.out.print(" " + a);
while(a>1)
{
if(a == 1) break; // this is not working though
if((a % 2 ) == 0) {
a = a / 2;
System.out.print(" " + a);
}
Thread.sleep(1000);
if((a % 2) != 0){
a = (a * 3) + 1;
System.out.print(" " + a);
}
Thread.sleep(1000);
}
}
}
最佳答案
这里的第二个if
条件应该是第一个条件的else
:
if((a%2)==0){ // ... } // ... if((a%2)!=0){
像这样:
while (a > 1) {
if ((a % 2) == 0) {
a /= 2;
System.out.print(" " + a);
} else {
a = (a * 3) + 1;
System.out.print(" " + a);
}
}
我还删除了毫无意义的 if (a == 1)
行,
由于 while (a > 1)
条件,
if
永远不会是 true
。
最后,我建议多注意正确缩进代码, 并像我一样在运算符周围添加空格, 否则代码很难阅读、理解和调试。
关于java - 如何将我的 Collatz 序列代码停止在 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41322377/