Java 使用递归反转子数组的顺序
我正试图严格使用递归反转开始和结束索引之间的子数组顺序。例如,如果子阵列为1,2,3,4,则它将变为4,3,2,1 但是,我遇到以下运行时错误: java.lang.ArrayIndexOutOfBoundsException:-1 在finalExam.reverse(finalExam.java:13) 在finalExam.reverse(finalExam.java:17) 我不知道如何解决这个问题 谢谢Java 使用递归反转子数组的顺序,java,Java,我正试图严格使用递归反转开始和结束索引之间的子数组顺序。例如,如果子阵列为1,2,3,4,则它将变为4,3,2,1 但是,我遇到以下运行时错误: java.lang.ArrayIndexOutOfBoundsException:-1 在finalExam.reverse(finalExam.java:13) 在finalExam.reverse(finalExam.java:17) 我不知道如何解决这个问题 谢谢 double[] reverse (double[] a, int start,
double[] reverse (double[] a, int start, int end) {
if (start == end) {return a;}
else {
a[start] = a[end];
a[end] = a[start];}
return reverse (a, start+1, end-1);
}
(既然你提到考试结束了)。以下是您的代码的问题:
- 您的支票应该是
start>=end
- 您交换两个号码的代码不正确
public static double[] reverse (double[] a, int start, int end) {
if (start >= end) {
return a;
}
else {
// this code will swap two elements
double temp = a[start];
a[start] = a[end];
a[end] = temp;
}
return reverse (a, start+1, end-1);
}
你可以在方法的开头做一个检查,看看你达到的索引是否大于数组的长度。经典尾部递归,这意味着你不应该把它写成递归,而应该写成一个简单的循环。(一个好的编译器可能会帮你避免这个错误,也可能不会)。。。我们在帮你做测试?你的课程允许这样做吗?你的教授有没有教过你用盒子编程或者手工模拟你的作业?你的指数不是你唯一的问题,试着一步一步地写在纸上。这是几个小时前在纸上完成的期末考试的一个问题。课程现在结束了。