2012-02-25 11 views
-1

私はクラス内で配列を使うアプリケーションを書く。この配列は、すべてのオブジェクトメソッドがデータにアクセスできるように、メソッドスコープの外側でグローバルに宣言されます。しかし、オブジェクトをインデックスに割り当てるとき、オブジェクトはその特定のメソッドで配列の一部としてしか利用できません。配列のそのインデックスを読み取ろうとする他のメソッドは、nullpointerexceptionを取得します。私の使用方法を示すJava配列とスコープ

いくつかのコード:アカウントの追加

Account[] accounts = new Account[8000]; 


public void addAccount() { 


    cli.printMessage("Welcome to the account add wizard."); 
    String holdername = cli.getInput(entername); 
    int accountnr = Integer.parseInt(cli.getInput(enternr)); 
    BigDecimal accbalance = new BigDecimal(cli.getInput(enterinitialbalance)); 

    accounts[accountnr] = new Account(holdername, accountnr, accbalance); 
    String accountinfo=accounts[accountnr].number + " " + " " + accounts[accountnr].holder + " " + accounts[accountnr].balance; 
    cli.printMessage(accountinfo); 

} 

はすべての方法を動作しますが、これはしないこのクラスの同じインスタンスから実行したとき:範囲には、このためです

public void getAccountinfo() { 

    int accountnr = Integer.parseInt(cli.getInput(getinfo)); 
    String accountinfo=accounts[accountnr].number + "" + "" + accounts[accountnr].holder + accounts[accountnr].balance; 
    cli.printMessage(accountinfo); 
} 

それとも、インスタンス変数とクラス変数が混乱しているのでしょうか?それはまったく違うものかもしれませんか?

私が手にエラーが任意のヘルプ

 String accountinfo=accounts[accountnr].number + "" + "" + accounts[accountnr].holder + accounts[accountnr].balance; 

グレイトフルでnullポインタ例外です! getAccountInfo

+0

あなたは何が起こると予想され、実際に何が起こっていますか? – Jivings

+4

それは問題ありません - 問題を示す短い*完全な*プログラムを表示してください。 –

+0

getAccountinfo()でaccountnrが持つ値 –

答えて

1

爆弾正しく実行Xでのアレイ「セル」が以前にaddAccount経由で設定されていなかった場合は、ユーザの入力に数Xの を聞かせてaccounts[X]nullであり、したがってaccounts[X].number

+0

あなたは正しいです、そして、私はエラーを見つけました。アプリケーションはcliアプリケーションです。ユーザーが何らかの入力を入力して「タスク」を終了したとき、私は再びメニューレンダリングメソッドを呼び出しました。問題は、コードを貼り付けたクラス(アカウント管理クラス)がそのメソッドの内部にインスタンス化されていることでした。したがって、各タスクのための新しいアカウント管理オブジェクトを作成する。そのクラス内のグローバルオブジェクトに移動すると、すべての作業が完了しました。 – nenne