5

私は独学で Java を学んでいます。したがって、以下のコードには学習/テスト以外の機能はありません。

基本的に、foreach ループ内で整数配列の要素を変更しようとしています (つまり、それらを半分にします)。

要素を並べ替えたり、追加したり、削除したりしているのではないことに注意してください。価値観を変えるだけ。

これが私のコードです:

Logger.describe("Now copying half of that array in to a new array, and halving each element");
Integer[] copyArray = new Integer[DEFAULT_SAMPLE_SIZE / 2];     
System.arraycopy(intArray, 0, copyArray, 0, DEFAULT_SAMPLE_SIZE / 2);
for (Integer x : copyArray) x /= 2;
Logger.output(Arrays.deepToString(copyArray));

ただし、元の配列 (intArray) は次のとおりです。

[47, 31, 71, 76, 78, 94, 66, 47, 73, 21]

そして、copyArray の出力は次のとおりです。

[47, 31, 71, 76, 78]

したがって、配列のサイズは半分になりましたが、要素 (整数) の値も半分にはなりませんでした。それで、私は何を間違っていますか?

ありがとうございました

4

4 に答える 4

13

foreach ループでそれを行うことはできません。

for (int i=0; i<copyArray.length;i++)
    copyArray[i] /= 2;

それ以外の場合は、配列に割り当て直していません。Integerちなみに、オブジェクトは不変であるため、変更することはできません(ただし、新しいオブジェクトを作成することはできません)。

コメントから更新:オートボクシング/アンボクシングなど、いくつかのことが起こっていることに注意してください。

copyArray[i] = Integer.valueOf(copyArray[i].intValue()/2);
于 2012-06-14T11:41:09.677 に答える
1
int counter = 0;
for(int x : copyArray)
{
        x /= 2;
        copyArray[counter++] = x;
}

プログラムxは、配列のブロック内の値ではなく、変数の値を変更しただけですcopyArray

于 2012-06-14T11:45:29.523 に答える
1
for (int i = 0; i< copyArray.length; i++) {
    copyArray[i] = new Integer(x /2);
}

動作するはずです。

于 2012-06-14T11:39:24.437 に答える
0

繰り返している配列の要素を変更するために foreach ループ構造を使用することはできないと思います。代わりに、次のような従来の for ループを使用する必要があります。

Logger.describe("Now copying half of that array in to a new array, and halving each element");
Integer[] copyArray = new Integer[DEFAULT_SAMPLE_SIZE / 2];     
System.arraycopy(intArray, 0, copyArray, 0, DEFAULT_SAMPLE_SIZE / 2);
    for (int i = 0; i < copyArray.length; i++) {
        copyArray[i] /= 2;
    }
Logger.output(Arrays.deepToString(copyArray));
于 2012-06-14T11:47:22.217 に答える