1. ホーム
  2. java

[解決済み] は、非静的フィールドへの静的な参照を作成できません。

2022-01-29 13:39:59

質問

このコードが正しくフォーマットされていない場合は、先に謝罪します。各行を再入力する代わりに貼り付けようとしています。もし正しくなければ、どなたか一度に複数行のコードを貼り付ける簡単な方法を教えていただけませんか?

私の一番の疑問は、以下のようなエラーメッセージが出続けることです。 Cannot make a static reference to the non-static field balance.

メソッドをstaticにしてみたのですが結果が出ず、ヘッダーから"static"を削除してmainメソッドを非staticにしましたが、メッセージが表示されます。 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;
    }   
}

解決方法は?

行数

account.withdraw(balance, 2500);
account.deposit(balance, 3000);

出金と入金を非静的にして、残高を変更できるようにするとよいでしょう。

public void withdraw(double withdrawAmount) {
    balance = balance - withdrawAmount;
}

public void deposit(double depositAmount) {
    balance = balance + depositAmount;
}   

を呼び出し、balanceパラメータを削除します。