我对编程非常陌生,而且我正在为我正在上课的某些代码遇到问题。我需要创建一个银行账户类,返回余额,存入一笔存款,提取,并打印一份包含当前利率的对账单。我很难尝试让主类返回储蓄账户类的价值。相反,它返回节点值,我无法弄清楚我做错了什么。任何帮助,将不胜感激。代码如下。 FinalExam.java
import java.io.*;
import java.util.Scanner;
public class FinalExam
{
SavingsAccount savings;
static String name;
static double balance;
public static void main (String[] args) throws NegativeAmountException, InsufficientFundsException {
double amount = 0;
SavingsAccount savings = null;
Scanner keyboard = new Scanner(System.in);
try
{
savings = new SavingsAccount("Penny Saved", 500.00, .05);
System.out.println(savings);
}
catch(NegativeAmountException e)
{
System.out.println("NegativeAmountException: " + e.getMessage());
System.exit(1);
}
System.out.println(savings);
Scanner input = new Scanner(System.in);
System.out.print("Enter your deposit amount: ");
amount = keyboard.nextDouble();
System.out.println(savings);
System.out.println("Enter your withdrawal amount: ");
amount = keyboard.nextDouble();
savings.postInterest();
System.out.println(savings);
}
}
BankAccount.java
import java.util.InputMismatchException;
import java.util.Scanner; //Import for scanner
public class BankAccount {
public String name;
public double balance;
//set name and balance
// make sure balance is not negative
// throw exception if balance is negative
public BankAccount(String name, double balance)throws NegativeAmountException {
if (balance < 0)
throw new NegativeAmountException("Cannot create a BankAccount with a negative balance");
}
public BankAccount(String name)
throws NegativeAmountException
{
// set name and use 0 balance
name = null;
balance = 0;
}
public void deposit(double amount) throws NegativeAmountException {
if (amount < 0)
throw new NegativeAmountException("Cannot deposit a negative amount: " + amount);
balance = balance + amount;
}
public void withdraw(double amount) throws InsufficientFundsException, NegativeAmountException {
if (amount > balance)
throw new InsufficientFundsException("Cannot withdraw more than the current balance of this BankAccount");
if (amount < 0)
throw new NegativeAmountException("Cannot withdraw a negative amount: " + amount);
balance = balance - amount;
}
public double getBalance() {
return balance;
}
// print bank statement including customer name
// and current account balance
public void printStatement() {
System.out.println("BankAccount owned by: " + name + " balance: $" + balance);
}
}
SavingsAcount.java
public class SavingsAccount extends BankAccount
{
double interest;
public SavingsAccount(String name, double balance, double interest) throws NegativeAmountException {
super(name, balance);
}
public double getInterest()
{
return interest;
}
public void postInterest() {
balance = balance + ((balance * interest)/12);
}
public void printStatement() {
super.printStatement();
System.out.println("Account for " + name + " Saved" + balance + " balance: $" + "Current Interest Rate is" + interest);
}
}
我知道FinalExam.java的最后一部分是不完整的,但是在我继续讨论其他问题之前,我试图将声明打印出来。任何建议将不胜感激。
答案 0 :(得分:1)
我很难尝试让主类返回储蓄帐户类的值。相反,它返回节点值,我无法弄清楚我做错了什么。
你的问题是你在打电话
savings = new SavingsAccount("Penny Saved", 500.00, .05);
System.out.println(savings);
println
会自动在其参数上调用toString
方法。由于您没有@Override
toString
SavingsAccount
方法,因此会打印您所谓的&#34;节点值&#34;。
您的SavingsAccount
有方法
public void printStatement()
似乎打印出您想要的信息。所以请调用它而不是println
。
答案 1 :(得分:1)
使用System.out.println(savings)
方法打印对象时,它会在内部调用该对象上的toString()
方法。您需要为类toString()
和SavingsAccount
实施BankAccount
方法。
对于SavingsAccount
使用此:
@Override
public String toString() {
return "SavingsAccount{" +
super.toString() +
", interest=" + interest +
'}';
}
BankAccount
使用此:
@Override
public String toString() {
return "BankAccount{" +
"name='" + name + '\'' +
", balance=" + balance +
'}';
}
目前您没有在类中设置实例变量。您正在检查负余额并抛出异常。
您还需要改进BankAccount
类中的构造函数,如下所示:
public BankAccount(String name, double balance)throws NegativeAmountException {
if (balance < 0) {
throw new NegativeAmountException("Cannot create a BankAccount with a negative balance");
}
this.name = name;
this.balance = balance;
}
// Update the SavingsAccount class constructor as well
public SavingsAccount(String name, double balance, double interest) throws NegativeAmountException {
super(name, balance);
this.interest = interest; // this is missing in your code.
}
我观察到的其他事情是,您正在创建Scanner类的多个实例。您可以在main方法中的每个位置使用相同的keyboard
实例。无需创建多个实例。其中一个是不必要的。
Scanner keyboard = new Scanner(System.in);
Scanner input = new Scanner(System.in);
答案 2 :(得分:1)
在FinalExam.java类中,您可以打印SavingsAccount.java类的值,但是您将获得该地址。这个id是因为在FinalExam.java类中System.out.println(savings);
而不是你应该像savings.printStatement();
那样使用。可能是我猜错了......
答案 3 :(得分:0)
已经给出了答案,但是你的BankAccount类构造函数中也存在问题,你没有将实例变量分配给构造函数参数,你只需要检查约束,
public BankAccount(String name, double balance)throws NegativeAmountException {
if (balance < 0)
throw new NegativeAmountException("Cannot create a BankAccount with a negative balance");
this.name = name;
this.balance = balance;
}
和
public BankAccount(String name) {
// set name and use 0 balance
this.name = name;
this.balance = 0;
}
感谢:)