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

Java动态方法调度实现利息计算时结果始终为0?

问题分析与解决方案

核心问题

父类Interest的display方法中,错误创建了一个新的Interest对象并给它的成员变量赋值,而非给当前调用方法的对象(子类实例)的成员变量赋值。导致子类SI/CI的p、r、t始终是默认值0,最终利息计算结果为0。此外,原代码还存在整数除法精度丢失、复利公式逻辑错误的问题。

修正步骤

  1. 删除父类display方法中多余的Interest ob = new Interest();语句,直接给当前对象的成员变量赋值。
  2. 将整数除法中的常量改为浮点数(如100改为100.0),避免精度丢失。
  3. 修正复利计算公式,正确实现“本金×(1+利率)^期数 - 本金”的逻辑。

修正后的完整代码

import java.util.*;

class Interest {
    int p, r, t;

    void display() {
        Scanner sc = new Scanner(System.in);
        System.out.println("------Interest Calculation------");
        System.out.print("Enter Principal Amount: ");
        p = sc.nextInt();
        System.out.print("Enter Rate of Interest: ");
        r = sc.nextInt();
        System.out.print("Enter Years: ");
        t = sc.nextInt();
    }
}

class SI extends Interest {
    void display() {
        super.display();
        // 用100.0触发浮点数除法,避免整数运算丢失精度
        double i = (p * r * t) / 100.0;
        System.out.println("Simple Interest: " + i);
    }
}

class CI extends Interest {
    void display() {
        super.display();
        // 修正复利公式,确保利率计算为浮点数
        double i = p * Math.pow(1 + r / 100.0, t) - p;
        System.out.println("Compound Interest: " + i);
    }
}

class Money {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Interest ob;
        System.out.println("1. Simple Interest");
        System.out.println("2. Compound Interest");
        System.out.println("Enter your choice: ");
        int ch = sc.nextInt();
        switch (ch) {
            case 1:
                ob = new SI();
                ob.display();
                break;

            case 2:
                ob = new CI();
                ob.display();
                break;

            default:
                System.out.println("Wrong Choice!");
                break;
        }
    }
}

关键说明

  • 动态方法调度逻辑本身是正确的:父类引用指向子类对象时,会自动调用子类的display实现。
  • 修正后,用户输入的数值会正确绑定到当前子类实例的成员变量,计算时使用实际输入值,同时解决了精度丢失和公式错误问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:17:01