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
相关产品推荐
相关产品推荐

