首页 > 解决方案 > 在 Java 中更改数组的值

问题描述

我有一个数组:

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

我究竟做错了什么?

标签: javaif-statement

解决方案


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

使用最后一个命令,您不是复制数组,而是将对同一数组的引用分配给arr变量swap。因此,任何更改arr都将反映在swap.

为了克隆数组并保留原始值,您可以像这样初始化它,创建一个深拷贝:

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

正如Arvind所指出的,您还可以调用arr.clone()创建arr一个浅拷贝:

int[] swap = arr.clone();

原始数组上的浅拷贝没有对象(不包括字符串)在此处产生的副作用。


推荐阅读