Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中更改数组的值_Java_If Statement - Fatal编程技术网

在Java中更改数组的值

在Java中更改数组的值,java,if-statement,Java,If Statement,我有一个数组: 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;

我有一个数组:

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]);
            }
        }
    }
我做错了什么

int[] swap;
int[] arr = {-15, -23, -34, -22, 2};
swap = arr;
使用最后一个命令,您不是在复制数组,而是在
arr
中将对同一数组的引用分配给
swap
变量。因此,
arr
上的任何更改都将反映在
swap

为了克隆阵列并保留原始值,您可以这样初始化它,创建深度副本:

int[] swap = Arrays.copyOf(arr, arr.length);
Arvind所述,您还可以在
arr
上调用
arr.clone()
创建浅拷贝:

int[] swap = arr.clone();
基元数组上的浅拷贝没有对象(不包括字符串)在这里的副作用

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

arr
是一个参考。它当前指向该阵列;考虑数组宝藏,和<代码> ARR < /代码>可以找到它的地图。< /P>
int[]swap=arr

这将生成一个新的宝藏地图,它指向完全相同的宝藏

arr[i]=1

这将按照
arr
地图找到X,向下挖掘,打开宝箱,并在那里做一些事情<代码>交换
,考虑到这是一个不同的地图,但它指向的是完全相同的宝藏,现在它的属性是,如果您遵循该地图,您将发现相同的更改。毕竟,只有一种财富


解决办法是复制这一宝藏<代码>数组。例如,copyOf(arr)
可以做到这一点。

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

int[] arr = {-15, -23, -34, -22, 2};
int[]swap = Arrays.copyOf(arr, arr.length);
使用这段代码,您实际上在swap中保存了arr数组的引用。这意味着两个名称都引用同一个数组。因此,您必须复制名为arr的数组

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

请显示
swap
-Array的声明。
int[]swap=Arrays.copyOf(arr,arr.length)
我们不知道什么是
swap
,但您可以看到
arr[i]
的新值,这仅仅是因为您在打印之前设置了它。更改了上面的代码使用@iłyaBursov的建议,或者在循环本身中复制一份
swap=arr
不复制数组的元素,因此
arr
swap
是单个数组的两个名称。
int[] swap;
int[] arr = {-15, -23, -34, -22, 2};
swap = arr;
int[]swap = Arrays.copyOf(arr, arr.length);