每当我在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]);
}
}