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

Java 我不想更改方法内部的数组

Java 我不想更改方法内部的数组,java,arrays,sorting,methods,Java,Arrays,Sorting,Methods,当我在我的方法中放入数组时public int[]insertionSort(final int array[]) 我不更改数组[] public int[] insertionSort(final int array[]) { int[] array_for_sorting = array; final int[]TempArray = array; int n = array_for_sorting.length; // pri

当我在我的方法中放入数组时
public int[]insertionSort(final int array[])
我不更改数组[]

 public int[] insertionSort(final int array[]) {
        int[] array_for_sorting = array;
        final int[]TempArray = array;
        int n = array_for_sorting.length;
       // printNumbers(TempArray);

        for (int j = 1; j < n; j++) {
            int key = array_for_sorting[j];
            int i = j-1;
            while ( (i > -1) && ( array_for_sorting [i] > key ) ) {
                array_for_sorting [i+1] = array_for_sorting [i];
                i--;
            }
            array_for_sorting[i+1] = key;
           // printNumbers(array_for_sortying);
        }
        //array = TempArray;
        printNumbers(TempArray);// for printing
        return array_for_sorting;
    }
public int[]插入排序(最终int数组[]){
int[]数组,用于排序=数组;
final int[]TempArray=数组;
int n=数组,表示排序长度;
//打印号码(临时数组);
对于(int j=1;j-1)和&(数组用于排序[i]>键)){
数组_用于_排序[i+1]=数组_用于_排序[i];
我--;
}
数组_用于_排序[i+1]=键;
//打印编号(用于排序的数组);
}
//数组=临时数组;
PrintNumber(TempArray);//用于打印
返回数组_进行_排序;
}
另外,为什么我的TempArray在for循环之后发生更改?

所有数组引用(
array
array\u用于排序
TempArray
)都引用相同的数组对象。因此,当您修改数组内容时,它将从其所有引用中可见


final在这里的意思是,不能将另一个数组重新分配给final数组引用。但是,它的内容可以改变


如果需要复制数组,请使用实际上
TempArray
array
是对内存中相同位置的两个引用,因此在修改
数组时,您正在修改
TempArray

因此,您需要创建一个新数组,如,您可以使用:

System.arraycopy(array, 0, TempArray, 0, array.length );

然后修改数组,另一个数组将不会更改。

此处不需要final;您不能重新分配该数组引用。@duffymo:我没有理解您的意思。“您不能将另一个数组重新分配给最终数组引用”-您不能重新分配引用参数,即使您关闭了最终数组引用。Java是按值传递的。谢谢@KugathasanAbimaran它现在正在工作:)@duffymo:我不是指参数数组引用,我是指
TempArray
final数组引用。