首页 > 解决方案 > 有人可以解释我的(非常差的)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;
        
    }
    

}

标签: javaindexoutofboundsexception

解决方案


j 在第 32 行的长度为 7。但 right 的长度仅为 4(第 25 行,因为 arr.length/2)。

在第 34 行,它试图到达 right[7],因此它是 right[4] 超出范围。


推荐阅读