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

在java中颠倒数组的顺序?

在java中颠倒数组的顺序?,java,arrays,Java,Arrays,我正试图编写一个函数来反转数组,但它不能像我想的那样工作 public class ReverseArray{ public static int[] reverseArray(int[] array){ int[] revArray=array; int i=0; int j=revArray.length-1; while(i<=j){ swap(i,j,revArray);

我正试图编写一个函数来反转数组,但它不能像我想的那样工作

public class ReverseArray{
    public static int[] reverseArray(int[] array){
        int[] revArray=array;
        int i=0;
        int j=revArray.length-1;
        while(i<=j){
            swap(i,j,revArray);
            j--;
            i++;
        }
        return revArray;
    }
    
    public static void swap(int i, int j, int[] revArray){
        int temp;
        temp=revArray[i];
        revArray[i]=revArray[j]; 
        revArray[j]=temp;
    }

    public static void main(String []args){
         
        int[] array={2,4,6,8,10,12,14,16};
         
         
        int[] revArray=reverseArray(array);
         
        for(int i=0;i<array.length;i++){
            System.out.print(array[i]+" ");
        }
        System.out.println();
         
         
        for(int i=0;i<revArray.length;i++){
            System.out.print(revArray[i]+" ");
        }
    }
} 

Output:16 14 12 10 8 6 4 2   
       16 14 12 10 8 6 4 2 
public类reversearlay{
公共静态int[]反向数组(int[]数组){
int[]revArray=数组;
int i=0;
int j=revArray.length-1;
而(iYour
reversearlay()
方法将
array
分配给变量
revArray
,因此这两个变量指向内存中的同一数组

要避免这种情况,请尝试以下方法:

int[] array={2,4,6,8,10,12,14,16};
         
         for(int i=0;i<array.length;i++){
             System.out.print(array[i]+" ");
         }
         
         int[] revArray=reverseArray(array);
         
         
         System.out.println();
         
         
         for(int i=0;i<revArray.length;i++){
             System.out.print(revArray[i]+" ");
         }
Output:2 4 6 8 10 12 14 16   
       16 14 12 10 8 6 4 2 
public static int[] reverseArray(int[] array){
    int[] revArray= Arrays.copyOf(array, array.length);
    int i=0;
    int j=revArray.length-1;
    while(i<=j){
        swap(i,j,revArray);
        j--;
        i++;
    }
    return revArray;
}
公共静态int[]反向数组(int[]数组){
int[]revArray=Arrays.copyOf(array,array.length);
int i=0;
int j=revArray.length-1;

虽然(i如注释中所述,问题是您引用的是中的同一数组。因此,当您在方法中更改它时,它会更改原始数组。但是,要反转数组,您不需要这么复杂。 选中此项:

int[] array={2,4,6,8,10,12,14,16};
int length = array.length;
int[] array1 = new int[length];
for(int i = 0 ; i < length; i++) {
  array1[length - 1 - i] = array[i];
}
System.out.println(Arrays.toString(array1)); // prints [16, 14, 12, 10, 8, 6, 4, 2]
int[]数组={2,4,6,8,10,12,14,16};
int length=array.length;
int[]数组1=新的int[长度];
for(int i=0;i
int[]revArray=array;
没有制作数组的副本。它只对同一对象进行了两次引用。@takendark或更准确地说,它创建了另一个引用类型变量
revArray
,并为其分配了相同的引用(对象标识符)如
array
reference-type-variable中所示。更多信息:您在适当的位置反转数组。您从未在任何地方保留原始数组的副本。谢谢您,好先生,为什么我的问题上有这么多人不喜欢?