在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;
而(iYourreversearlay()
方法将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中所示。更多信息:您在适当的位置反转数组。您从未在任何地方保留原始数组的副本。谢谢您,好先生,为什么我的问题上有这么多人不喜欢?