在java中改变数组的值

l3zydbqr  于 2021-06-29  发布在  Java
关注(0)|答案(3)|浏览(490)

我有一个数组:

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

我做错什么了?

7bsow1i6

7bsow1i61#

int[] swap;
int[] arr = {-15, -23, -34, -22, 2};
swap = arr;

使用最后一个命令,您不是在复制数组,而是在中为同一数组指定一个引用 arrswap 变量。因此,任何变化 arr 将反映在 swap .
为了克隆数组并保留原始值,您应该像这样初始化它:

int[] swap = Arrays.copyOf(arr, arr.length);

这样,输出将是所需的。

hgb9j2n6

hgb9j2n62#

交换必须是arr的深度副本,例如

int[] arr = {-15, -23, -34, -22, 2};
int[]swap = Arrays.copyOf(arr, arr.length);
tzdcorbm

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) 比如说,我能做到。

相关问题