我正在学习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]
因此虽然数组的大小减半,但元素(整数)的值也没有减半。那么我做错了什么?
谢谢
答案 0 :(得分:13)
你不能在foreach循环中这样做。
for (int i=0; i<copyArray.length;i++)
copyArray[i] /= 2;
否则,您不会将其分配回数组。 Integer
对象是不可变的,因此无法修改它们(尽管创建新的对象)。
评论更新: 请注意,虽然有一些事情正在发生,例如自动装箱/拆箱,大致:
copyArray[i] = Integer.valueOf(copyArray[i].intValue()/2);
答案 1 :(得分:1)
for (int i = 0; i< copyArray.length; i++) {
copyArray[i] = new Integer(x /2);
}
应该有用。
答案 2 :(得分:1)
int counter = 0;
for(int x : copyArray)
{
x /= 2;
copyArray[counter++] = x;
}
您的程序刚刚修改了变量x
的值,而不是数组copyArray
答案 3 :(得分: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));