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

Java循环中更新用户输入值迭代运算的代码问题排查

循环迭代数值未更新问题的解决

问题场景

需要实现:读取用户输入的数值,经过三次循环,每次扣除当前数值的10%,用更新后的数值作为下一次迭代的初始值,最终输出结果。但运行代码后发现数值始终是初始值,没有被更新。

用户原代码

import java.util.Scanner;

public class Program {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int amount = scanner.nextInt();
        for (int x=1; x<=3; x++){
            int mod = (10/100);
            int sub = amount*mod;
            amount = amount-sub; // *** line 10 ***
        }
        System.out.println(amount);
    }
}

错误原因

  1. 整数除法导致精度丢失:int mod = (10/100); 里的10和100都是整数,Java中整数除法会直接舍去小数部分,结果是0。这就导致每次计算sub = amount*mod得到的都是0,amount = amount - sub自然不会有任何变化。
  2. int类型不适合带百分比的计算:即使除法没问题,用整数存储金额,扣除10%时会截断小数,导致结果不准确。

修正后的代码

import java.util.Scanner;

public class Program {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 改用double类型存储数值,保留小数精度
        double amount = scanner.nextDouble();
        for (int x=1; x<=3; x++){
            // 直接用0.1表示10%,或者用10.0/100进行浮点除法
            double mod = 0.1;
            double sub = amount * mod;
            amount = amount - sub;
        }
        // 可以格式化输出,比如保留两位小数
        System.out.printf("%.2f", amount);
        // 或者直接输出原数值
        // System.out.println(amount);
    }
}

修正说明

  • 把amount的类型从int改为double,避免整数运算带来的精度丢失和截断问题。
  • 将mod的计算改为浮点类型,确保得到0.1的正确比例值,这样每次都能准确扣除当前数值的10%。
  • 如果需要格式化输出结果(比如保留两位小数),可以用printf方法,让输出更符合金额类场景的需求。

内容的提问来源于stack exchange,提问作者Gijon-ui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:36:05