Java Modifying Elements in a foreach

对着背影说爱祢 提交于 2019-11-28 13:47:04

You can't do that in a foreach loop.

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

Else you are not assigning it back into the array. Integer objects are immutable by the way so can't modify them (creating new ones though).

Updated from comment: Beware though that there are a few things going on, autoboxing/unboxing for example, roughly:

copyArray[i] = Integer.valueOf(copyArray[i].intValue()/2);
for (int i = 0; i< copyArray.length; i++) {
    copyArray[i] = new Integer(x /2);
}

should work.

int counter = 0;
for(int x : copyArray)
{
        x /= 2;
        copyArray[counter++] = x;
}

Your program just modified the value of variable x , not the values within the blocks of array copyArray

I think that you can NOT use the foreach loop construct in order to modify the elements of the array you are iterating. Instead, you need to use a classic for loop like so:

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));
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!