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

Java复利计算器按年展示年度收益运行异常求助

复利计算器年度收益查询功能修正

代码问题排查

  • 计息公式错误:原代码错误将本金纳入幂运算底数,且指数写为12/term,当投资年限超过12时指数为0,任何数的0次方为1,因此出现固定输出1的问题;逻辑错误触发数值溢出时会输出无穷大。
  • 资源释放逻辑错误:scan.close()放在for循环内部,第一次循环执行后就关闭了输入流,属于规范错误。
  • 输出格式疏漏:年份拼接无空格,会出现格式错乱的展示效果。

修正后代码

import java.util.Scanner;
import java.lang.Math;

public class CompoundInterestCalculator {
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        double initial; // 初始投资金额
        int term; // 投资年限
        float yearlyrate; // 年利率
        int repeat;

        // 系统提示
        System.out.printf("您好!我可以帮您计算固定利率下的复利收益\n\n请输入不带逗号或特殊符号的数字,以保证计算结果准确!");

        // 提示输入初始投资金额
        System.out.println("\n请输入初始投资金额:");
        initial = scan.nextDouble();

        // 提示输入年利率
        System.out.println();
        System.out.println("请输入年利率(百分比数值,例如输入5代表5%):");
        yearlyrate = scan.nextFloat();

        // 提示输入投资年限
        System.out.println();
        System.out.println("请输入投资年限:");
        term = scan.nextInt();

        // 循环输出每一年的累计本息
        for(repeat = 0; repeat < term; repeat++) {
            System.out.println();
            System.out.println("第" + (repeat+1) + "年的累计本息金额为:");
            // 修正后的按月复利计算公式:本金 * (1+月利率)^(月份数)
            double total = initial * Math.pow(1 + (yearlyrate/100) / 12, 12L * (repeat+1));
            System.out.printf("¥%.2f\n", total);
            System.out.println("-----------------------------------");
        }
        // 资源释放移到循环外部
        scan.close();
    } 
}

修正说明

  • 修正了计息公式:按月复利的年度本息计算逻辑为 初始本金乘以(1+月利率)的(已投资年份*12)次方,和原代码预设的按月计息规则保持一致
  • 调整了输出格式:新增金额保留两位小数的格式化处理,展示更直观
  • 调整了资源释放位置,符合Java IO操作规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:30:00