有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在执行Collatz contejure时无法打印1

当我想对Collatz contejure进行编程时,无法打印1。请帮忙,谢谢

问题是:给定自然数n。生成一个整数序列,如Collatz猜想所述:

这是我的代码(不是代码片段,因为它不清楚(底部是示例输入和输出):

import java.util.Scanner;
class test {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        
        while (n > 1) {
            System.out.println(n);
            
            if (n % 2 == 0) {
                n = n / 2;
            
            } else {
                n = (3 * n) + 1;
            }
        }

    }
}

样本输入:17

产出:17522613402005168842

还需要打印1


共 (2) 个答案

  1. # 1 楼答案

    只需在循环结束时打印1

    while (n > 1) {
        System.out.println(n); 
        if (n % 2 == 0) {
            n = n / 2;
            
        } else {
            n = (3 * n) + 1;
        }
    }
    System.out.println(1);
    
  2. # 2 楼答案

    演示Collatz Conjecture时,通常在计算后打印,因此将print语句移动到循环的末尾。如果要显示用于启动流程的输入值,请首先在循环外部打印该值

    System.out.println("Starting with " + n);
    while (n > 1) {
        if (n % 2 == 0) {
            n = n / 2;
            
        } else {
            n = (3 * n) + 1;
        }
        System.out.println(n); 
    }