Java 在没有任何循环的情况下反转整数数组

Java 在没有任何循环的情况下反转整数数组,java,arrays,Java,Arrays,我想写一段简洁的代码,在不使用任何循环的情况下反转整数数组。我所说的“逆转”指的是: [1,4,3,7,2]->[2,7,3,4,1]。 我认为IntStream在这里可能会有所帮助:它应该能够“捕获”有限的流,并像处理堆栈(LIFO)一样继续处理它。不幸的是,我不能-你能帮忙吗?任何循环都可以替换为 雇佣就是一个例子 import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; cla

我想写一段简洁的代码,在不使用任何循环的情况下反转整数数组。我所说的“逆转”指的是:
[1,4,3,7,2]->[2,7,3,4,1]

我认为IntStream在这里可能会有所帮助:它应该能够“捕获”有限的流,并像处理堆栈(LIFO)一样继续处理它。不幸的是,我不能-你能帮忙吗?

任何循环都可以替换为

雇佣就是一个例子

import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;

class RecursionReverseArray {


    private static <T> void reverseImpl(T[] arr,int lhsIdx, int rhsIdx) {
        if(lhsIdx == rhsIdx)
            return;
        T tmp = arr[lhsIdx];
        arr[lhsIdx] = arr[rhsIdx];
        arr[rhsIdx] = tmp;
        reverceImpl(arr, ++lhsIdx, --rhsIdx);
    }

    public static <T> void reverse(T[] arr) {
        reverseImpl(arr, 0, arr.length-1);
    }

    @Test
    void test() {
        Integer[] actual = {9,8,7,6,5,4,3,2,1};
        Integer[] expected = {1,2,3,4,5,6,7,8,9};
        reverse(actual);
        assertArrayEquals(expected, actual);
    }

} 
import static org.junit.jupiter.api.Assertions.*;
导入org.junit.jupiter.api.Test;
类递归ReversionArray{
私有静态void reverseImpl(T[]arr,int-lhsIdx,int-rhsIdx){
if(lhsIdx==rhsIdx)
回来
T tmp=arr[lhsIdx];
arr[lhsIdx]=arr[rhsIdx];
arr[rhsIdx]=tmp;
混响mpl(arr,++lhsIdx,--rhsIdx);
}
公共静态无效反向(T[]arr){
反向eimpl(arr,0,arr.length-1);
}
@试验
无效测试(){
整数[]实际值={9,8,7,6,5,4,3,2,1};
整数[]应为{1,2,3,4,5,6,7,8,9};
反向(实际);
资产质量(预期、实际);
}
} 

与Java 8+一样,您也可以使用。

如果不想使用循环,可以使用递归。下面是使用递归编写的代码

密码 导入java.io.*

类反向通道{

static void rvereseArray(int arr[], int start, int end) 
{ 
    int temp; 
    if (start >= end) 
        return; 
    temp = arr[start]; 
    arr[start] = arr[end]; 
    arr[end] = temp; 
    rvereseArray(arr, start+1, end-1); 
} 

static void printArray(int arr[], int size) 
{ 
    for (int i=0; i < size; i++) 
        System.out.print(arr[i] + " "); 
    System.out.println(""); 
} 

public static void main (String[] args) { 
    int arr[] = {1, 2, 3, 4, 5, 6}; 
    printArray(arr, 6); 
    rvereseArray(arr, 0, 5); 
    System.out.println("Reversed array is "); 
    printArray(arr, 6); 
} 
静态数组(int-arr[],int-start,int-end)
{ 
内部温度;
如果(开始>=结束)
回来
温度=arr[启动];
arr[start]=arr[end];
arr[end]=温度;
服务器阵列(arr、开始+1、结束-1);
} 
静态void打印数组(int arr[],int size)
{ 
对于(int i=0;i

}

注意IntStream使用循环。我想你的意思是“反转”,这类作业通常使用递归来解决。我建议你尝试一下,如果你有问题的话,再问另一个问题。我已经纠正了这个问题。你说的递归是指循环,不是吗?嗯,循环是我代码中最经常重复的片段,所以我试图找到删除它们的方法——就这么简单。上面的练习使用循环很容易,但是没有循环我就无法解决它。很遗憾,您不能帮助:(“递归的意思是循环,不是吗?”我确信Peter知道其中的区别。不,递归是循环的一种非常特别的替代方法。既然你对IntStream没问题,这就是你想要的吗?哈哈,答案不错,但我忍不住注意到你对标识符的有趣选择。@Taslim Oseni
左手侧/右手侧
?:)哦!现在明白了。