2

Hand という名前の別のクラスにあるため、直接アクセスできないカードの配列の一時的なコピーを作成する必要があります。Hand のサブクラスである RummyHand クラスのコピーが必要な配列への参照を返す getHand() というメソッドが与えられます。変数 rummyHand は、RummyHand クラスのインスタンス変数であり、Hand オブジェクトです。また、それが重要な場合、私は日食で働いています。

しかし、これもありません:

カード[] temp = 新しいカード[8];

temp = rummyHand.getHand();

またはこれ:

カード[] temp = rummyHand.getHand();

思ったように配列をコピーしました。

4

4 に答える 4

2

Arrays.copyOfまたはSystem.arrayCopyを使用して配列をコピーするか、より簡単に clone()を使用できます。

Card[] temp = rummyHand.getHand().clone();

=演算子を使用してもデータはコピーされないことに注意してください。変数が別の=ものを参照するようにするだけです。これは理解しておくことが重要です。そうしないと、後で多くの問題が発生するからです。

(うまくいけば役立つ)詳細:

new Card[8];

配列を作成します。これは、8 枚のカードへのポインタを保持するのに十分な大きさの新しいメモリ領域です。

Card[] temp

ある種のカードの配列を指さなければならない変数を作成します。の

=

途中で、変数がそのメモリ領域を指すようにします。表現

rummyHand.getHand();

メモリの別の領域のアドレスを提供します。だからライン

temp = rummyHand.getHand();

temp代わりに、変数がそのメモリ領域を指すようにするだけです。copyOfarrayCopyそしてcloneすべてが新しい配列を作成し、元の配列からの参照で埋めてから、新しい配列を返すことで機能します。

于 2012-10-09T14:20:43.803 に答える
0

使用する

Card[] hand = rummyHand.getHand();
Card[] temp = new Card[hand.length()];
System.arraycopy(hand,0,temp,0,hand.length());

その後、配列のコピーが作成されますが、配列内のカードへの参照は同じであることに注意してください。したがって、カードのプロパティを変更すると、両方の配列に同じ「カード インスタンス」が含まれているtempため、カードも変更されます。hand

于 2012-10-09T14:25:53.043 に答える
0

clone配列をコピーするために使用できます。

Card[] temp = rummyHand.getHand().clone();

これにより、オリジナルと同じ長さの正確なコピーが得られます。元の長さに関係なく 8 要素の長さのコピーが必要な場合は、次を使用できますArrays.copyOf

Card[] temp = Arrays.copyOf(rummyHand.getHand(), 8);
于 2012-10-09T14:22:00.650 に答える
0

配列をコピーするには、いくつかの方法があります。最も基本的な方法は、ソース配列と同じサイズの配列を作成し、ソース配列の要素をループして、それぞれを新しいコピーに追加することです。

Card[] source = rummyHand.getHand();
Card[] temp = new Card[source.length];

// for loop:
for (int i = 0; i < source.length; i++)
    temp[i] = source[i];

しかし、これを行う Java ユーティリティ クラスがあります。参照Arrays.copyOf:

Card[] temp = Arrays.copyOf(source, source.length);

ただし、新しい配列にはCardソース配列と同じ参照が含まれることに注意してください。つまり、配列内のオブジェクトを変更してもコピーは変更されません。実際のオブジェクトが変更されます。配列の内容のコピーが必要な場合は、ループを使用しCardて、配列に追加する前にそれぞれのコピーを作成する必要がありますtemp

あなたがやっているとき: 、コピーではなくtemp = rummyHand.getHand();元の配列への参照を取得しているため、変更を加えるとオブジェクト内の配列が変更されます..rummyHand

于 2012-10-09T14:22:10.220 に答える