java - 有人可以解释我的(非常差的)MergeShift 函数中的错误吗?
问题描述
我收到以下错误:第 10 行和第 34 行的长度 4 的索引 7 超出范围。如果有人可以向我解释这一点,以及我什至递归调用函数 correclty,我将不胜感激。请记住,我知道网上有数百个此功能的示例,我只是想看看我是否可以自己做。
package pckg;
public class MergeShift {
private static int[] testArr = {5,3,6,8,2,1,7,4};
public static void main(String[] args)
{
int[] sortedArr = mergeShift(testArr);
for(int i=0; i<sortedArr.length;i++)
{
System.out.print(sortedArr[i] + "\t");
System.out.println();
}
}
public static int[] mergeShift(int[] arr)
{
int[] left = new int[arr.length/2];
int[] right = new int[arr.length/2];
for(int i=0;i<arr.length/2;i++)
{
left[i] =arr[i];
}
for(int j=arr.length-1;j>=arr.length/2;j--)
{
right[j] = arr[j];
}
if(left.length>1)
{
mergeShift(left);
}
if(right.length>1)
{
mergeShift(right);
}
else
{
int[] finalArr = mergeArr(left,right);
return finalArr;
}
return right;
}
public static int[] mergeArr(int[] left, int[] right)
{
int[] mergedArr = new int[left.length + right.length];
for(int i=0; i<mergedArr.length/2;i++)
{
mergedArr[i] = left[i];
}
for(int j=mergedArr.length-1;j>=mergedArr.length/2;j--)
{
mergedArr[j] = right[j];
}
return mergedArr;
}
}
解决方案
j 在第 32 行的长度为 7。但 right 的长度仅为 4(第 25 行,因为 arr.length/2)。
在第 34 行,它试图到达 right[7],因此它是 right[4] 超出范围。
推荐阅读
- powershell - 查询空值时在powershell中调用MethodOnNull
- excel - Countif 用于 Excel 中的唯一组合
- java - 使用正则表达式检测字符串中的反斜杠字符的代码不起作用?
- python - 即使是简单的请求(例如 .head()),Pandas 也会运行缓慢
- cmake - 如何使用 C++/WinRT 手动创建 Windows 运行时组件?
- python - 使用 Python 基于多个键对 JSON 进行分组
- java - 使用 void 方法的 doNothing 方法时出现 UnfinishedStubbingException
- javascript - 使用 async await 与 map 保持一致性
- sql - 如何提高sql递归标量函数的性能?
- tomcat6 - 仅 Http 标志在 tomcat 6 和 servlet 2.5 上不起作用