我试图在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;
}
有什么问题吗?
当前回答
由于我想保持我原来的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));
}
所以基本上遍历初始数组,并将所有值以相反的顺序添加到新的(反向的)数组中。列表的类型可以是任何类型。 我多次遍历这段代码,这导致其他一些解决方案不起作用。
其他回答
试试下面的代码:
int arr[] = new int[]{1,2,3,4,5,6,7};
for(int i=0;i<arr.length/2;i++){
int temp = arr[i];
arr[i] = arr[(arr.length-1)-i];
arr[(arr.length-1)-i] = temp;
}
System.out.println(Arrays.toString(arr));
它有两个解
Loop Recursion public class _1_ReverseArray { public static void main(String[] args) { int array[] = {2, 3, 1, 4, 9}; //reverseArray(array, 0, array.length - 1); reverseArrayWhileLoop(array, 0, array.length - 1); printArray(array); } private static void printArray(int[] array) { for (int a : array) { System.out.println(a); } } private static void reverseArray(int[] array, int start, int end) { if (start > end) { return; } else { int temp; temp = array[start]; array[start] = array[end]; array[end] = temp; reverseArray(array, start + 1, end - 1); } } private static void reverseArrayWhileLoop(int[] array, int start, int end) { while (start < end) { int temp; temp = array[start]; array[start] = array[end]; array[end] = temp; start++; end--; } } }
使用流来反转
这里已经有很多答案,主要集中在就地修改数组。但是为了完整起见,这里有另一种使用Java流来保留原始数组并创建一个新的反向数组的方法:
int[] a = {8, 6, 7, 5, 3, 0, 9};
int[] b = IntStream.rangeClosed(1, a.length).map(i -> a[a.length-i]).toArray();
如果使用更原始的数据(即char, byte, int等),那么你可以做一些有趣的异或操作。
public static void reverseArray4(int[] array) {
int len = array.length;
for (int i = 0; i < len/2; i++) {
array[i] = array[i] ^ array[len - i - 1];
array[len - i - 1] = array[i] ^ array[len - i - 1];
array[i] = array[i] ^ array[len - i - 1];
}
}
public void display(){
String x[]=new String [5];
for(int i = 4 ; i > = 0 ; i-- ){//runs backwards
//i is the nums running backwards therefore its printing from
//highest element to the lowest(ie the back of the array to the front) as i decrements
System.out.println(x[i]);
}
}