Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我试图让我的灵活储蓄账户和CDSavingsAccount每月增加利息并显示出来_Java_Inheritance_Polymorphism - Fatal编程技术网

Java 我试图让我的灵活储蓄账户和CDSavingsAccount每月增加利息并显示出来

Java 我试图让我的灵活储蓄账户和CDSavingsAccount每月增加利息并显示出来,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,我的灵活储蓄账户应该每年增加1.2%的利息,每月复利。另一方面,CD储蓄账户每年增加4%的利息,并按季度复利。我已经设法让该计划在第一个月增加余额的利息,但在那之后就保持不变了。在第0个月,它说当灵活储蓄账户需要2000英镑,而CD储蓄账户需要3000英镑时,余额为0英镑。一旦该计划通过12个月,它应该将两个账户的余额相加。我相信这部分是有效的,只是我现在得到的平衡是错误的 这是我的驾驶课: 导入java.util.* public class SavingsAccountDriver1{ pu

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

这是我的驾驶课: 导入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());
}
}
这是我的FlexibleSavesAccount子类:

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
}//弹性储蓄账户结束

以下是我的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
}//存款账户结束


对所有的代码感到抱歉,我以前从未处理过多态性或继承,我的老师真的很差劲。我想这就是我的问题所在。您可以提供的任何帮助都将非常棒。

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

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

扩展类时,继承父类的所有
属性
方法
,因此无需在子类中定义
annualInterestate
属性。你看,这正是我们使用的原因。1-就是这样,我们就不会重复自己,并且多次输入相同的代码。2-它允许我们强制执行共同的签名/行为。从抽象类扩展而来的类必须要么提供抽象方法的实现,要么本身必须是抽象的,增加一层抽象

这个变量b非常适合保存monthlyInterest的值,但您似乎从未在设计中实际使用过它。 ps:如果你想保留它,你必须将它重命名为比
b
更有意义的名称

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

addMonthlyInterest
方法中,您将计算monthlyInterest的值并分配给b,然后将b分配给自身。这显然是错误的,您需要更改帐户的实际余额

public void addMonthlyInterest(double balance) {
  setBalance(balance + (balance * (annualInterestRate / 12)));
}
不言而喻,我为余额设置了一个新值,它是monthlyInterest与当前余额之和的结果

    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()));
}
方法
getInt(SavingsAccoutn1 f)
是多态性的一个很好的例子。现在,您将使用两个子对象调用此方法,并且这两个子对象都将根据自己在类中定义的唯一实现添加MonthlyInterest。这就是多态性的定义:两个相关但不同的对象获得相同的顺序,但作用方式不同

您应该将此方法重命名为更具说明性的方法

最后,关于你的类命名约定,也就是说,你所有的类都以1结尾,比如
SavingsAccount1
结尾,这一事实让我觉得你没有完全理解a的概念。类是一个蓝图,它使我们能够创建许多相同类型的对象,因此它的名称似乎不应该“绑定”到任何特定的实例/对象


注意:我同意你的观点,你应该坚持使用BigDecimal类进行货币交易,以免失去准确性,但正如你所说的,这是一种赋值,我假设BigDecimal超出了你老师教你的范围,所以我只使用了double。

我们可以让你整理一下代码,以便更容易理解吗?另外,你正在使用一个奇怪的混合双浮来做事情。。。尝试在货币交易中使用BigDecimal,这样就不会失去准确性。你的一些问题可能是由于数据类型的混合和匹配。我只是试图修复它,如果它仍然很难遵循我很抱歉我不完全确定我在做什么不要担心,我已经解决了你的问题,我只是编辑一个答案。希望你能理解,这将是有益的。好吧,太棒了,非常感谢你!先别谢我,我想这需要一段时间。。。
    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());
}