Java 我的getAverageBalance方法始终返回0
所以我有一个Account类和一个TestAccount类。在TestAccount类中,我需要调用getAverageBalance方法来查找我创建的所有帐户的平均余额。以下是我的平均余额法的代码: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; } 问题是
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,教授们并不总是写正确的代码。我要更新一下。