java - 如何将我的 Collat​​z 序列代码停止在 1?

标签 java while-loop collatz

我尝试使用 while 循环实现 Collat​​z 序列,但我无法在 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 - 如何将我的 Collat​​z 序列代码停止在 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41322377/

相关文章:

数字的 Collat​​z 序列

java - 为什么通过 Ghostscript API 渲染图像需要这么长时间?

java - Spring JPA findByDomainClass 生成错误的 where 子句

代码忽略 C 中的 IF 命令,FOR 的问题

linux - 如何正确使用 if else 语句和 while 循环与 C 中的子进程

Collat​​z链递归函数C

java - Glassfish,在 glassfish/domain/domain1 中找不到文件夹 portlet-container

java - 如何将我的 log4j.properties 设置为我的类路径

javascript - 使用 while 循环在 javascript 中不断添加值

jquery - 在 while 循环中使用 Jquery 加载动态数据