英文:
Reverse the order of array in java?
问题
我正在尝试编写一个反转数组的函数,但它的工作方式不如我所希望的。
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]+" ");
}
}
}
输出:16 14 12 10 8 6 4 2
16 14 12 10 8 6 4 2
但是,如果我像这样做:
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]+" ");
}
输出:2 4 6 8 10 12 14 16
16 14 12 10 8 6 4 2
我不明白为什么在我在打印数组之前调用函数 reverseArray
,两个数组都被反转了。
英文:
I am trying to write a function to reverse array, but it doesn't work like I want to.
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
But when I do it like this:
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
I don't understand why both arrays are reversed if I call the function revArray before I print them.
答案1
得分: 0
你的reverseArray()
方法将array
赋值给变量revArray
,因此这两个变量指向内存中的同一个数组。
为了避免这种情况,可以尝试像这样做:
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;
}
英文:
Your reverseArray()
method assigns array
to the variable revArray
, thus the 2 variables pointing the same array in memory.
To avoid that, try something like this:
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;
}
答案2
得分: 0
正如评论中所提到的,问题在于你在方法中引用了同一个数组。因此,当你在方法中对它进行更改时,它会改变原始数组。但是,要反转一个数组,并不需要这么复杂的操作。可以参考以下代码:
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)); // 输出 [16, 14, 12, 10, 8, 6, 4, 2]
英文:
As it has been mentioned in the comments, the problem is you are refering to the same array in. So, when you change it in the methods, it changes the original. But, to reverse an array you don't need this much of a complexity.
check this:
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]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论