当前位置: 首页 > 知识库问答 >
问题:

索引4超出4长度的界限

汪才英
2023-03-14
package dsa450;

import java.util.*;

public class countInversion {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter the size of Array");
        int n=sc.nextInt();
        int arr[]=new int[n];
        System.out.println("Enter the size of Array");
        for(int i=0;i<n;i++){
            arr[i]=sc.nextInt();
        }

        int p=arr.length;
        int temp[]=new int[n];
        int ans=mergeSort(arr,temp,0,n-1);
        System.out.println(ans);

    }

    static int mergeSort(int[] arr,int[]temp,int l,int r) {
         int inv=0;
         int mid;
        if (l<r) {
        
            mid=(l+r)/2;
            inv+= mergeSort(arr,temp,l, mid);
            inv+= mergeSort(arr,temp,mid+1,r);
            inv+= merge(arr,temp,l,mid+1,r);
        }
           return inv;
    }

    private static int merge(int []arr,int []temp,int l,int mid,int r) {
        
           
        int i=0;
        int j=0;
        int k=0;
        int swap=0;
        while(i<=mid-1 && j<=r) {
            if(arr[i]<=arr[j]) {
                temp[k++]=arr[i++];
                
            }
            else {
                temp[k++]=arr[j++];
                swap+=(mid-i);
            }
        }
        while(i<=mid-1) {
            temp[k++]=arr[i++];
            
        }
        
        while(j<=r) {
            temp[k++]=arr[j++];
            
        }
        
        for(i=l;i<=r;i++) {
            arr[i]=temp[i];
        }
        
        return swap;
    }

}

在此输入图像描述

这是我的代码,我试图解决它5个小时,但我没有得到什么问题,任何人都可以帮助。我也检查了资源,但代码与源代码相同,但它没有运行。

共有2个答案

汪驰
2023-03-14

您的合并方法失败,因为您没有根据数组的大小验证k。

我建议对您的合并方法进行以下小修改,以获得正确答案:

while (i <= mid - 1 && j <= r && k<temp.length) {
            if (arr[i] <= arr[j] ) {
                temp[k++] = arr[i++];

            } else {
                temp[k++] = arr[j++];
                swap += (mid - i);
            }
        }
        while (i <= mid - 1 && k < temp.length) {
            temp[k++] = arr[i++];

        }

        while (j <= r && k < temp.length) {
            temp[k++] = arr[j++];

        }
国阳
2023-03-14

提示:

实际错误是,您试图获取超出数组末尾的数组元素1位置。(数组索引从0到Array.length-1)

使用stacktrace中的行号精确计算出异常发生在代码的哪一行。它发生在合并方法中的数组索引操作中。这可能发生在6条线路上。

添加一些跟踪打印,以打印出合并方法中关键点处的关键变量值;e、 g.什么是l、r和mid,什么是i、j和k。

运行修改后的代码,查看跟踪打印输出的值,并尝试可视化代码在做什么。

找出超出数组末尾的位置和原因。。。找出你需要改变的地方。

 类似资料:
  • 目前,我得到了以下代码的错误。错误是索引4超出了长度4的范围。基本上,我想做的是返回第一个索引,其中数据没有按升序排序。如果对数据进行了排序,该函数将返回数组的长度。例如{10,20,90,5,70}将返回3(90) 我使用的测试用例如下: 任何帮助或线索都将不胜感激。

  • 我正在努力创造这个游戏https://en.wikipedia.org/wiki/Conway然而,每当我尝试使用printBoard方法时,我都会遇到以下错误 线程“main”java中出现异常。lang.ArrayIndexOutOfBoundsException:索引5超出长度5的界限。 我怎样才能解决这个问题?谢谢

  • 更新:原来我不得不再次导出一个SVG,并把它放在我文件的数据文件夹中。 我再次面临一个编码问题。抱歉,如果格式不正确,我还需要改进我的编码问题的措辞方式。 ArrayIndexOutOfBoundsException:索引30超出长度30的界限意味着什么?我已经试着自己去查了,但似乎找不到它的意思。 起初,当我添加svg时,代码正常工作,然后我再次添加了同样的文件,也正常工作(Eye2、pupil

  • 我不明白为什么会发生这个错误。m1.length和m1[0].length打印行和列的正确长度。我给出了以下投入: 然后发生了错误

  • 我使用的是一个3D数组,下面的代码是我得到的数组索引超出界限的错误,下面是相同的代码:- 获取以下错误:- 线程“main”Java.lang.ArrayIndexOutOfBoundsException中出现异常:索引0超出了Array2d.TugasArray3.Main(TugasArray3.:27)得分Mid Test1 Ke-1

  • 我是Java的新手,正在运行下面的代码,它运行得很好,但是我得到了一个数组索引超出了界限的异常。有人能帮我理解一下为什么我会得到这个例外吗?