每当我在java中运行插入排序程序时,就会发生异常。。但我不知道';我不知道为什么

每当我在java中运行插入排序程序时,就会发生异常。。但我不知道';我不知道为什么,java,sorting,insertion-sort,Java,Sorting,Insertion Sort,下面是我的插入排序代码,我面临数组索引的一个例外 import java.util.Scanner; public class Insertion_Sort { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=4; int ar[]=new int[n]; for(int i=0;i<n;i++)

下面是我的插入排序代码,我面临数组索引的一个例外

import java.util.Scanner;

public class Insertion_Sort {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=4;
        int ar[]=new int[n];
        for(int i=0;i<n;i++)
        {
            ar[i]=sc.nextInt();
        }
        for(int i=1;i<n;i++)
        {
            int c=ar[i];
            int j=i-1;
            while(ar[j]>ar[j+1] && j>=0)
            {
                ar[j+1]=ar[j];
                j--;
            }
            ar[j+1]=c;
            
        }
        for(int i=0;i<n;i++)
        {
            System.out.println(ar[i]);
        }
        

    }

}

J> =0应该是第一个条件。此外,您还需要检查j第一件事是您应该首先检查
j>=0
,如果发生这种情况,请检查第二个条件,即
ar[j]>ar[i]
。但是还有另一个问题,
ar
数组在这个过程中发生了变化,您应该使用
c
而不是
ar[i]
,因此条件是:
j>=0&&ar[j]>c
。以下是代码的工作版本:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = 4;
    int ar[] = new int[n];
    for (int i = 0; i < n; i++) {
        ar[i] = sc.nextInt();
    }
    for (int i = 1; i < n; i++) {
        int c = ar[i];
        int j = i - 1;
        while (j >= 0 && ar[j] > c) {
            ar[j + 1] = ar[j];
            j--;
        }
        ar[j + 1] = c;

    }
    for (int i = 0; i < n; i++) {
        System.out.println(ar[i]);
    }

}
publicstaticvoidmain(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int n=4;
int ar[]=新的int[n];
对于(int i=0;i=0&&ar[j]>c){
ar[j+1]=ar[j];
j--;
}
ar[j+1]=c;
}
对于(int i=0;i
错误会准确地告诉您出了什么问题。如何访问数组的位置-1?具体地说,您能想象一下
而(ar[j]>ar[j+1]&&j>=0)
可能导致问题的时间吗<代码>j>=0将不首先检查。哪一行是第17行?请不要隐藏调试所需的信息。@Swapnil错误的原因是您必须使用
,而(j>=0&&ar[j]>ar[j+1])
。这是必要的。检查此处以了解更多信息:@Swapnil您对插入排序使用了不正确的逻辑。在
while
循环中进行必要的更改后,结果输出将出错。一定要纠正它。你还需要检查j
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = 4;
    int ar[] = new int[n];
    for (int i = 0; i < n; i++) {
        ar[i] = sc.nextInt();
    }
    for (int i = 1; i < n; i++) {
        int c = ar[i];
        int j = i - 1;
        while (j >= 0 && ar[j] > c) {
            ar[j + 1] = ar[j];
            j--;
        }
        ar[j + 1] = c;

    }
    for (int i = 0; i < n; i++) {
        System.out.println(ar[i]);
    }

}