Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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 - Fatal编程技术网

Java 如何在此代码中仅使用一个数组实例?

Java 如何在此代码中仅使用一个数组实例?,java,Java,这个问题将是愚蠢的。但是有人能给我解释一下为什么我不能对两个方法使用相同的数组int[]a1吗 假设我有一个数组对象类 import java.util.Arrays; import java.util.Collection; import java.util.Collections; public class ArrayObject implements ArrayFunctions { private int[] arr; public ArrayObject(int[

这个问题将是愚蠢的。但是有人能给我解释一下为什么我不能对两个方法使用相同的数组int[]a1吗

假设我有一个数组对象

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;

public class ArrayObject implements ArrayFunctions {

    private int[] arr;

    public ArrayObject(int[] arr) {
        super();
        this.arr = arr;
    } 


    @Override
    public int[] sortAsc() {
        Arrays.sort(arr);
        return arr;
    }


    @Override
    public int[] sortDesc() {
        int temp;
        int size = arr.length;
        for (int i = 0; i < size/2; i++)
          {
             temp = arr[i];
             arr[i] = arr[size-1 - i];
             arr[size-1 - i] = temp;
          }
        return arr;
    }
}
public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int[] a1 = {2,9,45,7,46,35,89,12,456,12,5,35,4,98,34};

        ArrayObject arr1 = new ArrayObject(a1);
        ArrayObject arr2 = new ArrayObject(a1);

        int[] sortedArray = arr1.sortAsc();
        int[] sortDescArray = arr2.sortDesc();

        System.out.println(Arrays.toString(sortedArray));
        System.out.println(Arrays.toString(sortDescArray));

    }

}
结果是:

[456,98,89,46,45,35,35,34,12,12,9,7,5,4,2]

[456,98,89,46,45,35,35,34,12,12,9,7,5,4,2]

如何在两种数组排序方法中重复使用数组int[]a1,而不使用相同元素创建新数组

根据我的代码

ArrayObject arr2 = new ArrayObject(a1);
ArrayObject的另一个实例是否会使用arr1的相同元素创建一个全新的数组

请帮忙

现在是模拟时间:

如果杰克有一个1加仑的桶,他可以装满一加仑的啤酒,也可以装满一加仑的苹果酒。但是杰克不能在一加仑桶里同时装满一加仑啤酒和一加仑苹果酒

同样,千斤顶可以用棍子搅动铲斗内容物,使其顺时针或逆时针旋转。但是杰克不能让啤酒/苹果酒/水/任何东西同时向两个方向旋转

当杰克和吉尔拿着他们的桶回来时,它仍然只是一个桶,最多只能装一加仑。。。尽管事实上杰克和吉尔都同时握着把手


数组就像一个桶。如果两个
ArrayObject
实例共享一个数组,那么它仍然只是一个数组。它可以按升序或降序排序。。。但不是两者同时存在2

1-。。。啤酒:在这个版本的故事中,他们是大学生


2-。。。除非所有数组元素值都相同。

简短回答-不能。如果您希望
ArrayObject
的两个实例都获得未排序的数据,则不会这样做。问题是,
ArrayObject
正在修改数组的相同引用。您需要使用类似于
System.arraycopy()
的方法来确保
ArrayObject
的每个实例都作用于原始数组的独立副本Java
int[]
的值是一个引用类型。您正在为arr1和arr2中的
int[]
分配相同的引用。虽然在帖子中您将它们都命名为arr1。除了
arr[]
,您没有创建任何全新的数组,但如果您想检查数组是否相同,请在两种排序中检查
hashCode()
,您总是使用相同的数组进行两种排序方法methods@ElliottFrisch我错了,应该是arr2。但结果仍然是一样的,我们对此深表赞赏。我明白了。