Java 我的getAverageBalance方法始终返回0

Java 我的getAverageBalance方法始终返回0,java,class,object,Java,Class,Object,所以我有一个Account类和一个TestAccount类。在TestAccount类中,我需要调用getAverageBalance方法来查找我创建的所有帐户的平均余额。以下是我的平均余额法的代码: public static double getAverageBalance() { if (numberOfAccounts > 0) return totalValueOfAccounts / numberOfAccounts; else return 0; } 问题是

所以我有一个Account类和一个TestAccount类。在TestAccount类中,我需要调用getAverageBalance方法来查找我创建的所有帐户的平均余额。以下是我的平均余额法的代码:

public static double getAverageBalance()
{
if (numberOfAccounts > 0)
    return totalValueOfAccounts / numberOfAccounts;
else
    return 0;
}
问题是,if语句总是返回false,我不知道为什么。这是我帐户类代码的其余部分

public class Account
{
  private int id;
  private double balance;
  private static double annualInterestRate;
  private java.util.Date dateCreated;
  private static int numberOfAccounts;
  private static double totalValueOfAccounts;

  public Account() 
  {
    dateCreated = new java.util.Date();
  }
  public Account(int newId, double newBalance, double newAnnualInterestRate) 
  {
    this.id = newId;
    this.balance = newBalance;
    dateCreated = new java.util.Date();
    this.annualInterestRate = newAnnualInterestRate;
  }
  public int getId() 
  {
  return this.id;
  }
  public double getBalance() 
  {
   return balance;
  }
  public double getAnnualInterestRate() 
  {
    return annualInterestRate;
  }
  public static double getNumberOfAccounts()
  {
    return numberOfAccounts;
  }
  public static double getTotalValueOfAccounts()
  {
    return totalValueOfAccounts;
  }
  public void setId(int newId) 
  {
    this.id = newId;
  }
  public void setAnnualInterestRate(int newAnnualInterestRate) 
  {
    this.annualInterestRate = newAnnualInterestRate;
  }
  public void setBalance(double newBalance) 
  {
    this.balance = newBalance;
  }
  public static void setAnnualInterestRate(double newAnnualInterestRate) 
  {
    annualInterestRate = newAnnualInterestRate;
  }
  public double getMonthlyInterest() 
  {
    return this.balance * (annualInterestRate / 1200);
  }
  public java.util.Date getDateCreated() 
  {
   return this.dateCreated;
  }
  public void withdraw(double amount)
  {
    this.balance -= amount;
  }
  public void deposit(double amount) 
  {
    this.balance += amount;
  }
  public void awardMonthlyInterestRate()
  {
    this.balance += getMonthlyInterest();
  }
  public void closeAccount()
  {
    System.out.println("Closing account " + id);
    this.numberOfAccounts -= 1;
    this.totalValueOfAccounts -= balance;
  }
以下是testaccount代码:

public class TestAccount
{
public static void printAccount(Account acct)
{
System.out.printf("%5d $%9.2f %5.2f%% %29s\n\n", acct.getId(), acct.getBalance(), acct.getAnnualInterestRate(), acct.getDateCreated());
}
public static void main(String[] args)
{
    System.out.println("The average account balance is: " + Account.getAverageBalance());
    System.out.println();
    Account a = new Account();
    System.out.println("Default account: ");
    printAccount(a);
    a.setId(1122);
    a.setBalance(20000);
    a.setAnnualInterestRate(4.5);
    System.out.println("Modified account: ");
    printAccount(a);
    a.withdraw(2500);
    a.deposit(3000);
    System.out.println("After withdraw and deposit: ");
    printAccount(a);
    a.awardMonthlyInterestRate();
    a.awardMonthlyInterestRate();
    a.awardMonthlyInterestRate();
    a.awardMonthlyInterestRate();
    a.awardMonthlyInterestRate();
    a.awardMonthlyInterestRate();
    System.out.println("After 6 months of interest: ");
    printAccount(a);
    System.out.println("The average account balance is: " + Account.getAverageBalance());
    a.closeAccount();
    System.out.println();
    Account[] accts = new Account[5];
    for (int i = 0; i < accts.length; i++)
    {
        accts[i] = new Account(i+1, (double) Math.floor(Math.random()*100000), 3.0 );
    }
    System.out.println("Array of five accounts with random balances:");
    for (int i = 0; i < accts.length; i++)
    {
        printAccount(accts[i]); 
    }
    System.out.println("The average account balance is: " + Account.getAverageBalance());
    System.out.println();
    System.out.println("Array after awarding 6 months of interest: ");
    for (int i = 0; i < accts.length; i++)
    {
        Account b = accts[i];
        for (int j = 0; j < 6; j++)
        {
            b.awardMonthlyInterestRate();
        }
        printAccount(accts[i]);
    }
    System.out.println("The average account balance is: " + Account.getAverageBalance());
}
公共类测试帐户
{
公共静态无效打印帐户(帐户帐户)
{
System.out.printf(“%5d$%9.2f%5.2f%%%29s\n\n”、账户getId()、账户getBalance()、账户getAnnualInterestate()、账户getDateCreated());
}
公共静态void main(字符串[]args)
{
System.out.println(“平均账户余额为:”+account.getAverageBalance());
System.out.println();
账户a=新账户();
System.out.println(“默认帐户:”);
打印帐户(a);
a、 setId(1122);
a、 退平衡(20000);
a、 SetannualInterestate(4.5);
System.out.println(“修改账户:”);
打印帐户(a);
a、 撤回(2500);
a、 存款(3000);
System.out.println(“提款和存款后:”);
打印帐户(a);
a、 每月奖励一次;
a、 每月奖励一次;
a、 每月奖励一次;
a、 每月奖励一次;
a、 每月奖励一次;
a、 每月奖励一次;
System.out.println(“利息6个月后:”);
打印帐户(a);
System.out.println(“平均账户余额为:”+account.getAverageBalance());
a、 closeAccount();
System.out.println();
账户[]账户=新账户[5];
对于(int i=0;i

}

我认为您的构造函数中可能缺少一行:

public Account() {
    dateCreated = new java.util.Date();
    numberOfAccounts++;
}
如果您从未递增
numberOfAccounts
,我不确定您希望如何获得高于
0
的值。这尤其令人遗憾,因为该变量是私有的,所以只有
Account
方法才有机会设置它

您需要将同一行添加到第二个构造函数中,但可以通过调用第一个构造函数来简化。您还需要添加到您的
totalValueOfAccounts

public Account(int newId, double newBalance, double newAnnualInterestRate) 
{
    this(); // call the first constructor
    this.id = newId;
    this.balance = newBalance;
    this.annualInterestRate = newAnnualInterestRate;
    totalValueOfAccounts += newBalance;
}
您还需要在修改单个余额的每个方法中更新变量
totalValueOfAccounts
,例如:

public void setBalance(double newBalance) 
  {
     totalValueOfAccounts -= this.balance;
     totalValueOfAccounts += newBalance;
     this.balance = newBalance;

  }

我试过了,在我第三次和第四次打电话时,它给了我一个平均的平衡,但它是错误的。前两次我打电话给ITS做家庭作业,教授说account类文件是正确的,所以我真的迷路了。@user1054757,教授们并不总是写正确的代码。我要更新一下。