Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用递归反转子数组的顺序_Java - Fatal编程技术网

Java 使用递归反转子数组的顺序

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,

我正试图严格使用递归反转开始和结束索引之间的子数组顺序。例如,如果子阵列为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, 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);
}

你可以在方法的开头做一个检查,看看你达到的索引是否大于数组的长度。经典尾部递归,这意味着你不应该把它写成递归,而应该写成一个简单的循环。(一个好的编译器可能会帮你避免这个错误,也可能不会)。。。我们在帮你做测试?你的课程允许这样做吗?你的教授有没有教过你用盒子编程或者手工模拟你的作业?你的指数不是你唯一的问题,试着一步一步地写在纸上。这是几个小时前在纸上完成的期末考试的一个问题。课程现在结束了。