当前位置: 首页 > 知识库问答 >
问题:

我试图让我的FlexibleSavings帐户和CDSavingsAccount每月增加利息并显示它

萧英睿
2023-03-14

我的flexiblesavingsaccount应该每年增加1.2%的利息,每月复合。另一方面,CD储蓄账户每年增加4%的利息,并按季度复合。我已经设法让程序在第一个月给余额增加利息,但在那之后,它只是保持不变。在第0个月,它说当flexiblesavingsaccount需要2000和CDSavingsAccount需要3000时,余额为0。一旦该计划通过12个月,它应该是两个账户的余额相加。我相信这部分是有效的,只是我现在得到的平衡错了

下面是我的驱动程序类:import java.util.*;

public class SavingsAccountDriver1{
public static void main(String[] args){
FlexibleSavingsAccount1 saver1 = new FlexibleSavingsAccount1(10002,2000); //could be              FlexibleSavingsAccount saver1
CDSavingsAccount1 saver2 = new CDSavingsAccount1(10003,3000);//CD SavingsAccount saver 2
saver1.annualInterestRate=.012;
saver2.annualInterestRate = .04;

int i;

System.out.println("Month\tAccount #   Balance\tAccount #   Balance");
System.out.println("-----\t---------   -------\t---------   -------");
System.out.print("    0");
printFlex(saver1);
printCD(saver2);
System.out.println();
for(i=1;i<=12;i++)
 {System.out.printf("%5d",i);
   printIntFlex(saver1);
   printIntCD(saver2);
    System.out.println();
   }
System.out.printf("Final balance of both accounts combined: %.2f\n",(saver1.getMonthlyInterest()+saver2.getMonthlyInterest()));

}
public static void printIntFlex(FlexibleSavingsAccount1 f){
    getIntFlex(f);
    printFlex(f);
}

public static void printIntCD(CDSavingsAccount1 c){
    getIntCD(c);
    printCD(c);
}

public static void printFlex(FlexibleSavingsAccount1 f){
    System.out.printf("%12d%10.2f ",f.getAccount_Number(),f.getMonthlyInterest());
}
 public static void printCD(CDSavingsAccount1 c){
    System.out.printf("%12d%10.2f ",c.getAccount_Number(),c.getMonthlyInterest());
}
public static void getIntFlex(FlexibleSavingsAccount1 f){
    f.addMonthlyInterest(f.getBalance());
}
public static void getIntCD(CDSavingsAccount1 c){
    c.addMonthlyInterest(c.getBalance());
}
}

下面是我的SavingsAccount超类:公共抽象类SavingsAccount1{private double balance;private final int account_number;

    public SavingsAccount1(){
        this.balance = 0.0;
        this.ACCOUNT_NUMBER =0;
    }
    public SavingsAccount1(int ACCOUNT_NUMBER, double balance)
{
    this.balance = balance;
    this.ACCOUNT_NUMBER = ACCOUNT_NUMBER;
}
public abstract void addMonthlyInterest(double balance);

public double getBalance()
{       return balance;
}
public void setBalance(double balance){
    this.balance = balance; 
}
 public int getAccount_Number()
{
     return ACCOUNT_NUMBER;
}
public String toString(){
    return String.format("%s", getAccount_Number());
}//end of toString
}

以下是我的FlexibleSavingsAccount子类:

public class FlexibleSavingsAccount1 extends SavingsAccount1{

public static double annualInterestRate;
public static double b;

public FlexibleSavingsAccount1 (int ACCOUNT_NUMBER, double balance){
    super(ACCOUNT_NUMBER, balance);
}//end of 

@Override public void addMonthlyInterest(double balance){

    b =balance +(balance * (annualInterestRate / 12));
    this.b = b;
}
public double getMonthlyInterest(){
    return b;
}//end of getMonthlyInterest

public String toString(){
    return String.format("%s %s", super.toString(), getMonthlyInterest());
}//end of toString

}//FlexibleSavings帐户结束

下面是我的CDSavingsAccount子类:

public class CDSavingsAccount1 extends SavingsAccount1{

public static double annualInterestRate;
public static double b;

public CDSavingsAccount1 (int ACCOUNT_NUMBER, double balance){
    super(ACCOUNT_NUMBER, balance);
}//end of 

@Override public void addMonthlyInterest(double balance){
    b =balance +(balance * (annualInterestRate / 4));
    this.b = b;
}
public double getMonthlyInterest(){
    return b;
}//end of getMonthlyInterest

public String toString(){
    return String.format("%s %s", super.toString(), getMonthlyInterest());
}//end of toString

对不起所有的代码,我从来没有搞乱多态或继承以前,我的老师真的很糟糕。我想这就是我的问题所在。你能给的任何帮助都很棒。

共有1个答案

傅旺
2023-03-14

SavingsAccount1中,更改构造函数以允许给定annualInterestRate参数。为它创建一个getter就完成了。

关于FlexiblesAvingsAccount1类(由于与CDSavingsAccount1类的相似之处,我将提到的所有内容都适用于这两个类):

扩展类时,继承父类的所有属性方法,因此不需要在子类中定义annualinterestrate属性。你看,这正是我们使用继承的原因。1-是这样我们就不会后悔自己,并不断地键入相同的html" target="_blank">代码不止一次。2-它允许我们强制一个共同的签名/行为。从抽象类扩展而来的类必须为抽象方法提供实现,或者本身必须是抽象的,增加一个抽象层。

这个变量b很适合保存monthlyInterest的值,但您似乎从来没有在设计中实际使用过它。ps:如果要保留它,则必须将其重命名为更有意义的内容,而不是b

因此,您应该消除这两个属性,因为您从不使用它们。

AddMonthlyInterest方法中,计算monthlyInterest的值并将其赋值给b,然后将b赋值给它本身。这显然是错误的,你需要改变帐户的实际余额。

public void addMonthlyInterest(double balance) {
  setBalance(balance + (balance * (annualInterestRate / 12)));
}
    FlexibleSavingsAccount1 saver1 = new FlexibleSavingsAccount1(10002, 2000, .012);
    CDSavingsAccount1 saver2 = new CDSavingsAccount1(10003, 3000, .04);                                                                     
    System.out.println("Month\tAccount #   Balance\tAccount #   Balance");
    System.out.println("-----\t---------   -------\t---------   -------");
    System.out.print("    0");
    print(saver1);
    print(saver2);
    System.out.println();
    for (int i = 1; i <= 12; i++) {
        System.out.printf("%5d", i);
        printInt(saver1);
        printInt(saver2);
        System.out.println();
    }
    System.out.printf("Final balance of both accounts combined: %.2f\n",
            (saver1.getBalance() + saver2.getBalance()));
}
public static void printInt(SavingsAccount1 f) {
    getInt(f);
    print(f);
}
public static void print(SavingsAccount1 f) {
    System.out.printf("%12d%10.2f ", f.getAccount_Number(),
            f.getBalance());
}
public static void getInt(SavingsAccount1 f) {
    f.addMonthlyInterest(f.getBalance());
}

方法getInt(SavingsAccoutn1 f)是一个很好的例子,多态性是什么。现在,您将使用两个子对象调用此方法,并且这两个子对象都将根据在其类中定义的它们自己的唯一实现来addMonthlyInterest。这就是多态性的定义:两个相关但不同的对象获得相同的顺序,但作用于它的方式不同。

您应该将此方法重命名为更具解释性的方法。

最后,关于类命名约定的一句话,即所有类都以1结尾,例如savingsaccount1结尾,这让我认为您没有完全理解类的概念。类是一个蓝图,它使我们能够创建许多相同类型的对象,因此它的名称不应该与任何特定的实例/对象“绑定”。

 类似资料:
  • 常量express=require(“express”); 常量bodyParser=require(“body-parser”); 常量request=require('request'); 常量https=require(“https”); 常量app=express(); app.use(express.static(“public”)); app.use(BodyParser.URlenC

  • 进程 c:在函数“主要”中: prog.c:35:20:警告:格式“%d”需要类型为“int”的参数,但参数3的类型为“void * ”[-w format =]printf(" \ n % c \ t % d \ t identifier \ n ",c,p);^ prog. c: 47:24:警告:格式'%d'需要类型'int'的参数,但参数3的类型'void*'[-Wformat=]prin

  • 它表示TypeError:无法读取未定义的属性(读取'then')。我需要先显示警报消息,然后再打开窗口。打开站点。

  • 致命错误:未捕获错误:在null上调用成员函数get_status() 我已经安装了WooCommerce和WooCommerce订阅,以及YITH WooCommerce自定义我的帐户页面。当我点击查看订阅时,我得到一个关于网站有问题的错误。当我在Chrome中显示控制台和/或启用调试时,我会收到以下错误消息。任何帮助都非常感谢! 致命错误:未捕获错误:在/www/wp-content/plug

  • 我正在使用firebase auth的电子邮件和密码登录。 现在,当我更改帐户时,显示的用户名将根据更改的帐户而更改。我想在不更改用户名的情况下发布多个帐户。 这是用于声明名称的代码: 注册代码: 邮政编码:

  • 问题内容: 我正在寻找不在我的网站页面上显示instagram照片的方法,但是不能显示。如果我只有instagram用户的帐户名(例如jamieoliver),该怎么办?我的网站写在Wordpress上。 需要不显示 我的 图像 问题答案: 此URL格式将返回一个json文件,其中包含来自该用户的最新(20 +/-)媒体文件。 在您的示例中,您可以执行http://instagram.com/ja