我有一个数组:
int[] arr = {-15, -23, -34, -22, 2};
我正在尝试执行if语句,如果值小于0,则数组值将更改为-1。如果值大于0,则数组值将更改为1。
public static void main(String[] args) {
int[] swap;
int[] arr = {-15, -23, -34, -22, 2};
swap = arr;
for (int x = 0; x < arr.length; x++) {
System.out.println(arr[x]+swap[x]);
}
for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i]);
if (arr[i] < 0) {
arr[i] = -1;
System.out.println("Oringinal value "+swap[i] + " Error Code: " + arr[i]);
}
if (arr[i] > 0) {
arr[i] = 1;
System.out.println("Oringinal value "+swap[i] + " Error Code: " + arr[i]);
}
}
}
我现在的代码在上面。
目标是用更改后的“错误代码”打印原始数组值。
但是,打印输出将重新调整与原始值相同的值。
Oringinal value -1 Error Code: -1
Oringinal value -1 Error Code: -1
Oringinal value -1 Error Code: -1
Oringinal value -1 Error Code: -1
Oringinal value 1 Error Code: 1
我做错什么了?
3条答案
按热度按时间7bsow1i61#
使用最后一个命令,您不是在复制数组,而是在中为同一数组指定一个引用
arr
到swap
变量。因此,任何变化arr
将反映在swap
.为了克隆数组并保留原始值,您应该像这样初始化它:
这样,输出将是所需的。
hgb9j2n62#
交换必须是arr的深度副本,例如
tzdcorbm3#
int[] arr = {-15, -23, -34, -22, 2};
arr
是一个参考。它当前指向该数组;考虑阵法宝藏arr
能找到它的Map。int[] swap = arr;
这将生成一个新的宝藏Map,它指向完全相同的宝藏。arr[i] = 1;
这遵循arr
找到x的Map,向下挖掘,打开宝箱,在那里做了一堆事情。swap
,考虑到这是一张不同的Map,但它指向的是完全相同的宝藏,现在有了一个属性,如果你遵循这张Map,你会发现同样的变化。毕竟,只有一个宝藏。解决办法是复制这些宝藏。
Arrays.copyOf(arr)
比如说,我能做到。