-4

私はJavaにかなり慣れていないので、自分が間違っていることを理解するのに苦労しています。ここでは、プログラムの目的について簡単に説明します。

  1. 銀行口座を作ります。
  2. それに1000を入金します。
  3. 400を引き出します。
  4. 500を引き出します。
  5. 結果と期待される結果を出力します。

これが私のコードです。非静的変数bankAccは静的コンテキストから参照できないと言い続けます。

 public class BankAccountTester
    {
        private double bankAcc; //Stores bankAcc balance

        public void money(double deposit)
        {
            deposit= (1000);

            int withdraw1 = -400;
            int withdraw2= -500;
            bankAcc= bankAcc + withdraw1 + withdraw2;
        }

        public double getbankAcc()//Returns value to bankAcc so it has new balance
        {
            return bankAcc;
        }

        //Prints out value and expected value
        public static void main(String[] args){
            System.out.Println("My bank account has " + bankAcc);
            System.out.Println("Expected is 100");
        }
    }
4

6 に答える 6

0

変数bankAccはインスタンス変数です。つまり、BankAccountTester( を使用してnew BankAccountTester()) のインスタンスを作成する場合にのみ存在します。static main()インスタンスを作成せずにメソッドから呼び出すだけなので、bankAcc変数はありません。宣言をprivate static double bankAcc;に変更して、プログラムを機能させます。

于 2013-10-11T21:01:03.060 に答える
0

mainは静的メソッドであるため、静的変数と静的メソッドのみを参照できます。静的変数は次のようになります。

private static double bankAcc;

あなたが書いたように、bankAcc はインスタンス変数です。つまり、BankAccountTester の特定のインスタンスに関連付けられています。

インスタンスがない (つまり、 を作成していないnew BankAccountTester()) ため、BankAccountTester の静的部分のみを参照できます。

于 2013-10-11T21:02:03.727 に答える
0

main()メソッドですstatic。つまり、クラス インスタンスは関連付けられていません。WhilebankAccBankAccountTesterクラスのインスタンス メンバーであるため、最初にそのインスタンスを作成しないとアクセスできません。次のオブジェクト インスタンスを使用してプログラムをテストします。

public static void main(String[] args){
    BankAccountTester bat = new BankAccountTester();
    bat.deposit(0.0);
    System.out.Println("My bank account has " + bat.getbankAcc());
    System.out.Println("Expected is 100");
}

こちらもご覧ください

于 2013-10-11T20:58:44.953 に答える
0

クラスを作成するとき、クラスの内容には 2 つの「フレーバー」があります。「クラス」に関連付けられたグローバル プロパティとして存在する静的と、そのクラス定義を使用して構築する個々のオブジェクトに存在する非静的です。そのため、コード -to Java- は次のようになります。

  • オブジェクト: private double bankAccpublic void moneypublic double getbankAcc
  • グローバル クラス アクセスの場合:public static void main

静的コードは、オブジェクトが構築されているかどうかに関係なく存在するため、オブジェクト変数にアクセスする必要があることを静的メソッドに伝えることはできません。静的メソッドは、知る限り存在しません。このクラスからオブジェクトを作成したとしても、ローカルには という変数がありますがbackAcc、静的にアクセスすることはできません。

従うべき一般的なレシピは次のとおりです。

public class Test {
    private long whatever = 123456;
    public Test() {
      // real code goes here.
      System.out.println("my whatever variable holds " + whatever);
    }
    public static void main(Sting[] args) {
        // build an object based on the Test class.
        // and let it handle everything else.
        new Test();
    }
}

このコードをコンパイルして実行すると、Test クラスには、実際のオブジェクトmainを構築する静的 (= グローバルに呼び出し可能な) メソッドが含まれます。Testその前に、作業するオブジェクトがあり、クラス定義のみが存在します。オブジェクトを構築すると、Testオブジェクト指向の優れた方法で、必要なすべてのことを行うことができます。

于 2013-10-11T20:59:33.157 に答える
0

まず、 (re. a variable) は、クラスのその変数のグローバル インスタンスが1 つstatic存在することを意味します。これは、クラスの各インスタンスが独自の.private double bankAcc;bankAcc

より具体的には、 mainisであるため、それはのインスタンスのstaticメソッドではありません。これは、出力しようとしているときに、許可されていない静的コンテキストから非静的変数にアクセスしようとしていることを意味します。 BankAccountTesterbankAcc

とを正確に使用moneyしている場所がわからなくてもgetbankAcc、次のように変更することでこれを修正できます。

private double bankAcc;

に:

private static double bankAcc;

于 2013-10-11T20:59:41.473 に答える