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个小时,但我没有得到什么问题,任何人都可以帮助。我也检查了资源,但代码与源代码相同,但它没有运行。
您的合并方法失败,因为您没有根据数组的大小验证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++];
}
提示:
实际错误是,您试图获取超出数组末尾的数组元素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的新手,正在运行下面的代码,它运行得很好,但是我得到了一个数组索引超出了界限的异常。有人能帮我理解一下为什么我会得到这个例外吗?