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
左手侧/右手侧
?:)哦!现在明白了。