如果这段代码格式不正确,我会提前道歉,尝试粘贴而不是重新键入每一行。如果它不正确,有人能告诉我一个简单的方法粘贴多行代码一次?
我的主要问题是,我不断收到一条错误消息,指出: Cannot make a static reference to the non-static field balance.
我尝试过使方法成为静态的,没有结果,并通过从头中删除“static”使main方法成为非静态的,但是我得到了以下消息: java.lang.NoSuchMethodError: main Exception in thread "main"
有人有什么想法吗?感谢您的帮助。
public class Account {
public static void main(String[] args) {
Account account = new Account(1122, 20000, 4.5);
account.withdraw(balance, 2500);
account.deposit(balance, 3000);
System.out.println("Balance is " + account.getBalance());
System.out.println("Monthly interest is " + (account.getAnnualInterestRate()/12));
System.out.println("The account was created " + account.getDateCreated());
}
private int id = 0;
private double balance = 0;
private double annualInterestRate = 0;
public java.util.Date dateCreated;
public Account() {
}
public Account(int id, double balance, double annualInterestRate) {
this.id = id;
this.balance = balance;
this.annualInterestRate = annualInterestRate;
}
public void setId(int i) {
id = i;
}
public int getID() {
return id;
}
public void setBalance(double b){
balance = b;
}
public double getBalance() {
return balance;
}
public double getAnnualInterestRate() {
return annualInterestRate;
}
public void setAnnualInterestRate(double interest) {
annualInterestRate = interest;
}
public java.util.Date getDateCreated() {
return this.dateCreated;
}
public void setDateCreated(java.util.Date dateCreated) {
this.dateCreated = dateCreated;
}
public static double withdraw(double balance, double withdrawAmount) {
double newBalance = balance - withdrawAmount;
return newBalance;
}
public static double deposit(double balance, double depositAmount) {
double newBalance = balance + depositAmount;
return newBalance;
}
}
6条答案
按热度按时间mwyxok5s1#
静态电话提取和存款是你的问题。账户提取(余额2500);这行行不通,因为“balance”是account的一个示例变量。代码没有什么意义,取款/存款不会封装在account对象本身吗?所以撤军应该更像
当然,根据你的问题,你可以在这里做额外的验证,以防止负平衡等。
bihw5rsg2#
如果你想的话,你可以保持你的取款和存款方法是静态的,但是你必须像下面的代码那样编写它。sb=期初余额,eb=期末余额。
ruyhziif3#
main
是静态方法。它不能引用balance
,这是一个属性(非静态变量)。balance
只有通过对象引用(例如myAccount.balance
或者yourAccount.balance
). 但是当它通过类(例如Account.balance
(那是谁的余额?)我对你的代码做了一些修改,这样它就可以编译了。
以及:
xvw2m8pv4#
写下:
你也可以这样写:
uqxowvwt5#
您试图直接从静态方法访问非静态字段,这在java中是不合法的。balance是一个非静态字段,因此可以使用对象引用访问它,也可以使其成为静态字段。
zed5wv106#
台词
您可能希望使取款和存款非静态,并让它修改余额
并从调用中删除balance参数