我的代码中有一个问题,我的输入数据无法正确打印。该程序要求用户输入每个帐户的初始余额。但是,在打印该输入时,两个值始终会打印相同。无论我为第一个帐户输入什么内容,它始终会打印出与第二个帐户输入的值相同的值。该程序应打印出为每个帐户输入的单独值。
不仅如此,该程序在合成后不会为计算出的利息输出正确的值。我查看了代码,找不到任何错误。任何帮助将不胜感激。
输入数据:
Enter the customer’s full name: John
Enter the number of years: 4
Enter initial balance for the saving account: 10000.05
Enter initial balance for the check account: 20000.00
预期产量:
==========================================
Initial account balances
==========================================
John’s Account Rate Balance
==========================================
Saving 2.95% $10000.05
Check 2.10% $20000.00
==========================================
==========================================
Final account balances after 4 years
==========================================
John’s Account Rate Balance
==========================================
Saving 2.95% $11250.87
Check. 2.10% $21750.98
==========================================
我的输出:
==========================================
Initial account balances
==========================================
John’s Account Rate Balance
==========================================
Saving 2.95% $20000.0
Check 2.10% $20000.0
==========================================
==========================================
Final account balances after 4 years
==========================================
John’s Account Rate Balance
==========================================
Saving 2.95% $22501.623657381748
Check. 2.10% $24471.619413096105
==========================================
这是我的代码:
导入java.util.Scanner;
class Account{
private static double balance;
private static int NUM_COMPOUND_TIMES = 12;
Account(double Balance) { //constructor with parameter
balance = Balance;
}
public double getInitialBalance(){ //get the initial balance method
return balance;
}
public double getFinalBalance(double rate, int numYears) { //get the final balance method
balance = getInitialBalance()*Math.pow((1+(rate/NUM_COMPOUND_TIMES)), (NUM_COMPOUND_TIMES*numYears));
return balance;
}
}
class Customer{
private String customerName;
private static Account checkAccount;
private static Account savingAccount;
public Customer(String custName, Account savingAcc, Account checkAcc){ //constructor with parameters
customerName = custName;
savingAccount = savingAcc;
checkAccount = checkAcc;
}
public Account getSavingAccount(){
return savingAccount;
}
public Account getCheckAccount() {
return checkAccount;
}
public String getCustomerName() {
return customerName;
}
}
public class Bank {
private static Customer customerObj;
private static int numYears;
private static double INTEREST_SAVING;
private static double INTEREST_CHEQUE;
public static void main(String[] args) {
createCustomerAccounts();
printInitialBalances();
printFinalBalances();
}
public static void createCustomerAccounts() {
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter the customer's full name: ");
String custName = keyboard.nextLine();
System.out.println("Enter the number of years: ");
numYears = keyboard.nextInt();
System.out.println("Enter initial balance for the savings account: ");
double ibSavings = keyboard.nextDouble();
System.out.println("Enter initial balance for the cheque account: ");
double ibCheck = keyboard.nextDouble();
keyboard.close();
Account savingAcc = new Account(ibSavings);
Account checkAcc = new Account(ibCheck);
customerObj = new Customer(custName, savingAcc, checkAcc);
}
public static void printInitialBalances() {
System.out.println("==========================================");
System.out.println("Initial account balances");
System.out.println("==========================================");
System.out.println(customerObj.getCustomerName() + "'s Account Rate Balance");
System.out.println("==========================================");
System.out.println("Saving 2.95% " + "$" + customerObj.getSavingAccount().getInitialBalance());
System.out.println("Check 2.10% " + "$" + customerObj.getCheckAccount().getInitialBalance());
System.out.println("==========================================");
}
public static void printFinalBalances() {
INTEREST_SAVING = customerObj.getSavingAccount().getFinalBalance(0.0295,numYears);
INTEREST_CHEQUE = customerObj.getCheckAccount().getFinalBalance(0.0210,numYears);
System.out.println("==========================================");
System.out.println("Final account balances after " + numYears + " years");
System.out.println("==========================================");
System.out.println(customerObj.getCustomerName() + "'s Account Rate Balance");
System.out.println("==========================================");
System.out.println("Saving 2.95% " + "$" + INTEREST_SAVING);
System.out.println("Check 2.10% " + "$" + INTEREST_CHEQUE);
System.out.println("==========================================");
}
}
最佳答案
您的错误是在Account
类中。您已将余额定义为static
变量,这意味着内存中仅共享balance
值的单个引用:
private static double balance;
结果是任何时候随时更新任何账户的余额,余额的值将被覆盖。删除static关键字,以使余额在单个帐户实例本地:
private double balance;
另外,打印时
balance
的格式不是正确的货币格式,因为它正在使用默认格式打印出double
值。一种简单的解决方法是使用NumberFormat
的货币格式化程序。要使用它,请将此行添加到Bank
类的顶部以导入NumberFormat
:import java.text.NumberFormat;
然后将货币格式作为变量添加到
Bank
类的顶部:private static NumberFormat currency = NumberFormat.getCurrencyInstance();
现在,在您的打印余额方法中,您可以使用货币格式来获取String表示形式,作为正确的美元/美分格式,包括美元符号:
public static void printInitialBalances() {
String myCurrency = currency.format(123.5);
System.out.println("==========================================");
System.out.println("Initial account balances");
System.out.println("==========================================");
System.out.println(customerObj.getCustomerName() + "'s Account Rate Balance");
System.out.println("==========================================");
System.out.println("Saving 2.95% " + currency.format(customerObj.getSavingAccount().getInitialBalance()));
System.out.println("Check 2.10% " + currency.format(customerObj.getCheckAccount().getInitialBalance()));
System.out.println("==========================================");
}
public static void printFinalBalances() {
INTEREST_SAVING = customerObj.getSavingAccount().getFinalBalance(0.0295,numYears);
INTEREST_CHEQUE = customerObj.getCheckAccount().getFinalBalance(0.0210,numYears);
System.out.println("==========================================");
System.out.println("Final account balances after " + numYears + " years");
System.out.println("==========================================");
System.out.println(customerObj.getCustomerName() + "'s Account Rate Balance");
System.out.println("==========================================");
System.out.println("Saving 2.95% " + currency.format(INTEREST_SAVING));
System.out.println("Check 2.10% " + currency.format(INTEREST_CHEQUE));
System.out.println("==========================================");
}
这会产生您希望的输出:
==========================================
Initial account balances
==========================================
John's Account Rate Balance
==========================================
Saving 2.95% $10,000.05
Check 2.10% $20,000.00
==========================================
==========================================
Final account balances after 4 years
==========================================
John's Account Rate Balance
==========================================
Saving 2.95% $11,250.87
Check 2.10% $21,750.98
==========================================