0

そのため、カスタムリンク リストに何かを追加するNullPointerExceptionと . このプログラムの目的は、引き出しをノードとして持つリストを使用して、引き出しのチェストをシミュレートすることです。各引き出しには、家財道具をノードとして含むリストがあります。

関連するコードは次のとおりです。new ChestOfDrawers(3);UI クラスで:を作成すると、エラーが発生します。

public class ChestOfDrawers{

    private static OwnList chest;  
    private static int[] parametres;

    public ChestOfDrawers (int drawers){
        chest = new OwnList();
        create();
    }

    public static void create(){
        for (int i = 0; i < parametres.length; i++) {
            Object drawer = new Drawer(i, parametres[i]);
            chest.add(i, drawer); //This is causing the error
        }   
    }
}

ここDrawerで参照されているクラスは、ドロワーのクラスです。int iIDとint parametres引き出し容量として必要です。リストへのparametres[]追加が行われる前に配列がいっぱいになり、引き出し容量の情報が含まれます。質問のリンクされたリスト ( OwnList) は、提供されたコース教材の一部であるため、100% 正しく機能しています。Java のものとほぼ同じです。クラスを別のテストクラスでテストしたところ、問題なく動作しました。ここでどこかで間違いを犯しました。助けてください!

4

1 に答える 1

4

問題は、parameters 配列を初期化していないことです。このフィールドはデフォルトで null になります。宣言されている場所、または静的初期化子ブロックで初期化する必要があります。さらに、なぜ 2 つのフィールドと create メソッドは static なのですか? それらは確かにインスタンス状態のようです...

より良いバージョンは次のとおりです。

public final class ChestOfDrawers{
    private final OwnList chest = new OwnList();  
    private final int[] parametres;

public ChestOfDrawers (int drawers){
    if (drawers < 0) throw new IllegalArgumentException("Drawers may not be negative");
    chest = new OwnList();
    parametres = new int[drawers]; // <-- I'm assuming that's the intended meaning
    initialize();
}        

private void initialize(){
    for(int i = 0; i < parametres.length; i++){
        Object drawer = new Drawer(i, parametres[i]); // <-- parametres[i] will always be 0
        chest.add(i, drawer); 
    }   
}
}

実際に parametres 配列に何を含める必要があるのか​​ わかりません(intの新しい配列にはゼロ値が入力されます)-しかし、それは読者の演習として残します:-)

于 2013-03-26T20:53:55.030 に答える