0

次のスプリッターメソッドは、2つの別々のリンクリストのIntLinkedBag配列を返すように設計されています。これは、listSplitLessGreaterメソッドを呼び出すことによって実現され、整数のリンクリストのヘッド参照と、並べ替えられた2つの新しいリンクされた整数リストのヘッド参照を含むIntNode配列を返すスプリッター整数値を渡します。スプリッターメソッドは記述どおりに機能します。それは私がそれを機能させることができる唯一の方法でした。しかし、私はそれをコーディングするためのより簡単でより良い方法がなければならないことを知っています。// * ** * ****の間のすべてをこれに置き換えたい

newLists[0].head = answer[0]; 
newLists[1].head = answer[1];

しかし、そうすると、プログラムの実行時にnullポインター免除エラーが発生します。私の質問はなぜですか?そして、このコードを書く正しい方法はどうですか?

 public IntLinkedBag[] splitter(int target)
{
    IntLinkedBag[] newLists = new IntLinkedBag[2]; 
    IntNode[] answer = new IntNode[2];
    answer = IntNode.listSplitLessGreater(head, target);

    //**********************************
    IntLinkedBag b = new IntLinkedBag();
    IntLinkedBag c = new IntLinkedBag();
    b.add(5);
    b.head = answer[0];
    newLists[0] = b;
    c.add(5);
    c.head = answer[1];
    newLists[1] = c;
    //**********************************

    return newLists;
}

以下のようにコードを更新しました。エラーは発生しませんが、何も返されません。テストコードはリンクリストを出力しますが....そしてアイデアは?

  public IntLinkedBag[] splitter(int target)
{
    IntLinkedBag[] newLists = {new IntLinkedBag(), new IntLinkedBag()}; 

    IntNode[] answer = new IntNode[2];
    answer = IntNode.listSplitLessGreater(head, target);


        newLists[0].head = answer[0]; 
    newLists[1].head = answer[1];



    System.out.println(IntNode.showList(newLists[0].head)); //test code
    System.out.println(IntNode.showList(newLists[1].head)); //test code

    return newLists;
}

このコードを追加すると機能しますが、なぜこれが必要なのですか?

newLists[0].add(5); //adding a number to linked list to create a temporary head.
newLists[1].add(5); //don't know why I have to have this but its only way code works correctly
4

1 に答える 1

4

newlists[0]またはの内部で実際に初期化されるものはありませんnewlists[1]。配列は、作成時にのデフォルト値を作成しますnull

次のようなものを試してください。

IntLinkedBag[] newLists = new IntLinkedBag[2];
for(int i = 0; i < newLists.length; i++) {
    newLists[i] = new IntLinkedBag();
}

よりコンパクトに、これを行うことができます:

IntLinkedBag[] newLists = {new IntLinkedBag(), new IntLinkedBag()};

それはループなしで同じことをします。

于 2012-05-08T03:01:50.980 に答える