You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现3x+1算法运行结果异常,是代码哪里出现了问题?

问题原因

你的错误主要有两处:

  1. 输入读取逻辑错误
    你调用的System.in.read()方法的作用是读取输入流中单个字符的ASCII码值,而非将输入的数字字符串转为对应整数。你输入字符'2'时,其对应的ASCII十进制值恰好是50,这和你运行结果中第一个输出值完全匹配,程序实际是从50开始执行3x+1逻辑,自然和你预期的输入2的运行结果不一致。
  2. 递归终止判断位置错误
    你当前的终止判断写在数值修改逻辑之后,会导致两个问题:
  • 初始输入为1时,会先执行一次逻辑再判断,步数统计错误
  • 数值变为1后不会立刻终止,会多执行一次循环步骤
修正方案

首先引入java.util.Scanner来正确读取整数输入,再调整终止判断的位置,修正后的完整代码如下:

package de.craftingdani.math.main;

import java.util.Scanner;

public class Main
{
    static long count = 0;
    
    public static void main(String[] args)
    {
        try(Scanner scanner = new Scanner(System.in))
        {
            System.out.println("Please put in a number: ");
            tryNumber(scanner.nextInt());
        }
        catch(Exception e)
        {
            System.err.println("Error, please give a valid number");
            e.printStackTrace();
        }
    }

    public static void tryNumber(int input) throws InterruptedException
    {
        // 进入方法先判断是否达到终止条件
        if(input == 1)
        {
            System.out.println(input);
            System.out.println("reached 4, 2, 1 loop.\nTook " + count + " steps.");
            return;
        }
        Thread.sleep(100);
        System.out.println(input);
        switch(input % 2)
        {
            case 0:   //even
                input = input / 2;
                count++;
                break;
            case 1:   //odd
                input = 3 * input + 1;
                count++;
                break;
        }
        tryNumber(input);
    }
}

修正后输入2的运行结果符合预期:

Please put in a number: 
2
1
reached 4, 2, 1 loop.
Took 1 steps.

内容的提问来源于stack exchange,提问作者CraftingDani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:42:00