1

私はJavaのプロジェクトに取り組んでいます(私は非常に新しいです)。

同様のオブジェクト セット (インデックス 3 ~ 16) とそれぞれの 3 (インデックス 0 ~ 2) を参照する 2 つの配列を作成しようとしています。オブジェクトをスタックにしたい (これを「パイル」に変更し、その長さを報告する方法があるだけです)。「Pile」オブジェクトのそれぞれは、「Piece」オブジェクトを受け入れる準備ができています。

Pile<Piece>[] leftBoard = new Pile[16];
Pile<Piece>[] rightBoard = new Pile[16];
for (int i = 3; i < 16; i++){
    leftBoard[i] = new Pile<Piece>();
    rightBoard[i] = leftBoard[i];
}
for (int i = 0; i < 3; i++){
leftBoard[i] = new Pile<Piece>();
}
for (int i = 0; i < 3; i++){
    rightBoard[i] = new Pile<Piece>();
}

助けてください!ありがとう!

4

1 に答える 1

1

Pile<Piece>[]ジェネリックの配列です。Java の型消去により、これは Very Bad Thing™ です。代わりに、次のようにしてみてください。

// Initialize arrays.
ArrayList<Pile<Piece>> leftBoard = new ArrayList<Pile<Piece>>(16);
ArrayList<Pile<Piece>> rightBoard = new ArrayList<Pile<Piece>>(16);

// Fill arrays so we can use the "set" method.
leftBoard.add(Collections.<Pile<Piece>>nCopies(null));
rightBoard.add(Collections.<Pile<Piece>>nCopies(null));

// Store values.
for (int i = 3; i < 16; i++){
    Pile<Piece> thisPiece = new Pile<Piece>();
    leftBoard.set(i, thisPiece);
    rightBoard.set(i, thisPiece);
}
for (int i = 0; i < 3; i++){
    leftBoard.set(i, new Pile<Piece>());
}
for (int i = 0; i < 3; i++){
     rightBoard.set(i, new Pile<Piece>());
}

ArrayList動的にサイズ変更できるため(他の多くのことの中でも)、優れています。

簡単な要約: String[] arrayArrayList リストがある場合:

  • array[i]と同じですlist.get(i)
  • array[i] = varと同じですlist.set(i, var)
  • で要素を最後に追加できますlist.add(var)
  • list.remove(index)またはを使用して、どこからでも要素を削除できますlist.remove(var)
  • 詳細については、件名のArrayListドキュメントまたはJava チュートリアルを参照してください。

編集:変更不可能なリストのトピックについて:

List<MyObject> l = Collections.unmodifiableList(myList);
l.get(0);             // valid as long as element exists
l.get(0).foo();       // valid
l.get(0).setFoo(bar); // valid
l.remove(foo);        // INVALID
l.add(foo);           // INVALID

したがって、リスト内のオブジェクトを操作することはできますが、リスト内の位置やリスト自体の内容を変更することはできません。ロックダウンされた刑務所を想像してみてください。誰も出入りしていませんが、囚人と話すことはできます。

Piles をそのままにして、s を移動できるようにしたい場合はPiece、変更不可能なリストが良いと思います。のようなメソッドがある限りsomePile.setPiece(somePiece)、これはうまくいくはずです。

于 2013-04-01T01:30:54.553 に答える