我试图在Java中反转一个int数组。
此方法不反转数组。
for(int i = 0; i < validData.length; i++)
{
int temp = validData[i];
validData[i] = validData[validData.length - i - 1];
validData[validData.length - i - 1] = temp;
}
有什么问题吗?
我试图在Java中反转一个int数组。
此方法不反转数组。
for(int i = 0; i < validData.length; i++)
{
int temp = validData[i];
validData[i] = validData[validData.length - i - 1];
validData[validData.length - i - 1] = temp;
}
有什么问题吗?
当前回答
Collections.reverse(Arrays.asList(yourArray));
java.util.Collections.reverse()可以反转java.util.Lists和java.util.Arrays.asList()返回一个列表,该列表包装了您传递给它的特定数组,因此在调用Collections.reverse()之后,yourArray将被反转。
其代价只是创建一个list对象,不需要额外的库。
在Tarik和他们的评论者的回答中已经提出了一个类似的解决方案,但我认为这个答案会更简洁,更容易被分析。
其他回答
番石榴
使用谷歌Guava库:
Collections.reverse(Ints.asList(array));
使用XOR解决方案来避免临时变量,您的代码应该是这样的
for(int i = 0; i < validData.length; i++){
validData[i] = validData[i] ^ validData[validData.length - i - 1];
validData[validData.length - i - 1] = validData[i] ^ validData[validData.length - i - 1];
validData[i] = validData[i] ^ validData[validData.length - i - 1];
}
请看这个链接来获得更好的解释:
http://betterexplained.com/articles/swap-two-variables-using-xor/
您的程序只适用于length = 0,1。 你可以试试:
int i = 0, j = validData.length-1 ;
while(i < j)
{
swap(validData, i++, j--); // code for swap not shown, but easy enough
}
import java.util.Scanner;
class ReverseArray
{
public static void main(String[] args)
{
int[] arra = new int[10];
Scanner sc = new Scanner(System.in);
System.out.println("Enter Array Elements : ");
for(int i = 0 ; i <arra.length;i++)
{
arra[i] = sc.nextInt();
}
System.out.println("Printing Array : ");
for(int i = 0; i <arra.length;i++)
{
System.out.print(arra[i] + " ");
}
System.out.println();
System.out.println("Printing Reverse Array : ");
for(int i = arra.length-1; i >=0;i--)
{
System.out.print(arra[i] + " ");
}
}
}
由于我想保持我原来的Array原样,我用以下方法解决了这个问题:
List<Integer> normalArray= new ArrayList<>();
List<Integer> reversedArray = new ArrayList<>();
// Fill up array here
for (int i = 1; i <= normalArray.size(); i++) {
reversedArray .add(normalArray.get(normalArray.size()-i));
}
所以基本上遍历初始数组,并将所有值以相反的顺序添加到新的(反向的)数组中。列表的类型可以是任何类型。 我多次遍历这段代码,这导致其他一些解决方案不起作用。