I have written this program over and over again, can someone please tell me what I am missing, it looks like its a small error I am not catching.
Here is what I am trying to accomplish:
Design a class named Account that contains:
- A private int data field named id for the account(default 0)
- A private double data field named balance for the account (default 0)
- A private double data field named annualInterestRate that stores the current interest rate (default 0). Assume all accounts have the same interest rate.
- A private Date data field named dateCreated that stores the date when the account was created. A no-arg constructor that creates a default account.
- A constructor that creates an account with the specific id and initial balance.
- The accessor and mutator methods for id, balance, and annualInterestRate.
- The accessor method for dateCreated
- A method named getMonthlyInterestRate() that returns the monthly interest rate.
- A method named withdraw that withdraws a specified amount from the account A method named deposit that deposits a specified amount to the account.
Write a test program that creates an Account object with an account ID of 1122, a balance of $20,000, and an annual interest rate of 4.5%. Use the withdraw method to withdraw $2,500, use the deposit method to deposit $3,000 and print the balance, the monthly interest, and the date when this account was created.
error is non-static variable this cannot be referenced from a static context
Account account1 = new Account(1122, 20000, .045);
import java.util.Date;
class assignExam {
public static void main(String[] args) {
Account account1 = new Account(1122, 20000, .045);
account1.withdraw(2500);
account1.deposit(3000);
java.util.Date dateCreated = new java.util.Date();
System.out.println("Date Created:" dateCreated);
System.out.println("Account ID:" account1.id);
System.out.println("Balance:" account1.getBalance());
System.out.println("Interest Rate:" account1.getAnnualInterestRate());
System.out.println("Balance after withdraw of 2500:" account1.getAnnualInterestRate());
System.out.println("Balance after deposit of 3000:" account1.getAnnualInterestRate());
System.out.println("Monthly Interest:" account1.id);
System.out.println("Process completed.");
}
class Account {
//define variables
private int id;
private double balance; // balance for account
private double annualInterestRate; //stores the current interest rate
private Date dateCreated; //stores the date account created
//no arg construtor
Account () {
id = 0;
balance = 0.0;
annualInterestRate = 0.0;
}
//constructor with specific id and initial balance
Account(int newId, double newBalance) {
id = newId;
balance = newBalance;
}
Account(int newId, double newBalance, double newAnnualInterestRate) {
id = newId;
balance = newBalance;
annualInterestRate = newAnnualInterestRate;
}
//accessor/mutator methods for id, balance, and annualInterestRate
public int getId() {
return id;
}
public double getBalance() {
return balance;
}
public double getAnnualInterestRate() {
return annualInterestRate;
}
public void setId(int newId) {
id = newId;
}
public void setBalance(double newBalance) {
balance = newBalance;
}
public void setAnnualInterestRate(double newAnnualInterestRate) {
annualInterestRate = newAnnualInterestRate;
}
//accessor method for dateCreated
public void setDateCreated(Date newDateCreated) {
dateCreated = newDateCreated;
}
//define method getMonthlyInterestRate
double getMonthlyInterestRate() {
return annualInterestRate/12;
}
//define method withdraw
double withdraw(double amount) {
return balance -= amount;
}
//define method deposit
double deposit(double amount) {
return balance = amount;
}
}
}
CodePudding user response:
Roberto's answer is correct, but for a bit of context.
You currently have your Account declared as a nested class within your assignExam class. It is not declared static, which means for an instance of that class to be created, you would need an instance of assignExam to be created as well.
So, you can either make the class static, by using:
static class Account {
Or you could move the account class outside your assignExam class, which will automatically make it an independent class, and thus static, since it is no longer nested within another class.
CodePudding user response:
Class Account should be static