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); } }
错误原因
- 整数除法导致精度丢失:
int mod = (10/100);里的10和100都是整数,Java中整数除法会直接舍去小数部分,结果是0。这就导致每次计算sub = amount*mod得到的都是0,amount = amount - sub自然不会有任何变化。 - 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
相关产品推荐
相关产品推荐

