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

Java逐行比较两数计算较大值数位和时结果累加问题解决

问题根因

代码运行结果不符合预期,由三个明确的编码错误导致:

  • 求和变量sum定义在for循环外层,生命周期覆盖所有循环迭代,上一行计算得到的sum值不会清空,下一行计算时会基于历史值继续累加,直接导致第二行结果变成第一行、第二行计算值的总和。
  • 循环边界条件错误:写为i <= 2时循环会执行3次,对应示例只有2行输入的场景,第三次循环会读取空内容触发解析报错。
  • 用double浮点数类型存储输入整数、做取模/除法运算存在天然精度风险,浮点数无法精确表示所有整数,运算过程中可能出现尾值误差,导致数位计算逻辑出错。
修复方法

核心调整三点:

  1. 将sum变量的定义移动到for循环内部,保证每处理一行输入时,sum都从0开始独立计算,不同行的计算结果互不干扰
  2. 修正循环边界,固定2行输入时用i < 2即可,动态行数场景改用scanner.hasNextLine()做循环判断条件
  3. 替换浮点数类型为整数类型(int/long,根据输入数字大小选择)存储输入值,避免浮点数精度问题,也可以直接用Math.max()方法取两数较大值,简化分支判断逻辑

修复后的可运行代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 示例为2行输入,动态读取所有行可替换为 while (scanner.hasNextLine())
        for (int i = 0; i < 2; i++) {
            // 每行独立初始化求和变量,初始值为0
            int sum = 0;
            String line = scanner.nextLine().trim();
            // 跳过空行避免解析报错
            if (line.isEmpty()) continue;
            String[] numParts = line.split("\\s+");
            long left = Long.parseLong(numParts[0]);
            long right = Long.parseLong(numParts[1]);
            long max = Math.max(left, right);
            
            while (max > 0) {
                sum += max % 10;
                max = max / 10;
            }
            System.out.println(sum);
        }
        scanner.close();
    }
}
补充说明
  • 如果输入可能包含负整数,取最大值后要先调用Math.abs()取绝对值再计算数位和,避免负数取模得到负值导致求和结果错误。
  • 拆分输入字符串时用split("\\s+")可以兼容多空格、制表符分隔的场景,比单空格分隔的鲁棒性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:39:57