非静的フィールドへの静的参照を作成することはできません

このコードが正しく書式設定されていない場合は、事前にお詫びし、各行を再入力する代わりに貼り付けを試みます。それが正しくない場合、誰かが一度に複数行のコードを貼り付ける簡単な方法を教えてもらえますか?

My main question is that I keep getting an error message stating: Cannot make a static reference to the non-static field balance.

I have tried making the methods static, with no result, and making the main method non-static by removing "static" from the header, but then I get the message: 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;
    }   
}
7
追加された 編集された
ビュー: 1
account.withdraw()とaccount.deposit()メソッドの引数としてバランスが取れない理由がわかりません。アカウントは残高を知っているので、最も単純な答えは、あなたが本当にそれらを望むなら、main()からの呼び出しでaccount.balanceと言う必要があります。
追加された 著者 user949300,
変更タブをスペースにフォーマットして貼り付けた後にコードを選択し、ctrl-kを押して自動インデントする
追加された 著者 ratchet freak,

6 答え

main is a static method. It cannot refer to balance, which is an attribute (non-static variable). balance has meaning only when it is referred through an object reference (such as myAccount.balance or yourAccount.balance). But it doesn't have any meaning when it is referred through class (such as Account.balance (whose balance is that?))

私はあなたのコードを編集してコンパイルしました。

public static void main(String[] args) {
    Account account = new Account(1122, 20000, 4.5);
    account.withdraw(2500);
    account.deposit(3000);

そして:

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

public void deposit(double depositAmount) {
    balance += depositAmount;
}   
11
追加された

台詞

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

あなたは引き出しをして非静的に預けて残高を修正させたいかもしれません

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

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

コールから残高パラメータを削除する

6
追加された

あなたは静的メソッドから直接静的でないフィールドにアクセスしようとしていますが、これはjavaでは有効ではありません。 balanceは非静的フィールドなので、オブジェクト参照を使用してアクセスするか、静的にします。

1
追加された

撤回して預金する静的な呼び出しが問題です。         account.withdraw(残高、2500); "balance"はAccountのインスタンス変数であるため、この行は機能しません。とにかくコードはあまり意味がありませんが、アカウントオブジェクト自体の中にカプセル化されていますか?撤退はもっと似ているはずです

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

もちろん、あなたの問題に応じて、負のバランスなどを防ぐためにここで追加の検証を行うことができます。

1
追加された

あなたはあなたの引き出しを保つことができますし、静的メソッドを静的にしたい場合は、以下のコードのように記述する必要があります。 sb =開始残高およびeB =終了残高。

Account account = new Account(1122, 20000, 4.5);

    double sB = Account.withdraw(account.getBalance(), 2500);
    double eB = Account.deposit(sB, 3000);
    System.out.println("Balance is " + eB);
    System.out.println("Monthly interest is " + (account.getAnnualInterestRate()/12));
    account.setDateCreated(new Date());
    System.out.println("The account was created " + account.getDateCreated());
1
追加された

書くだけ:

private static double balance = 0;

そしてあなたはそれを次のように書くこともできます:

private static int id = 0;
private static double annualInterestRate = 0;
public static java.util.Date dateCreated;
0
追加された