Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义测试用例的插入排序没有输出_Java_Sorting - Fatal编程技术网

Java 自定义测试用例的插入排序没有输出

Java 自定义测试用例的插入排序没有输出,java,sorting,Java,Sorting,我有这段代码用于插入排序,它无法给出测试用例的输出 import java.io.*; import java.util.*; public class Solution { public static void insertionSortPart2(int[] ar) { // Fill up the code for the required logic here // Manipulate the array

我有这段代码用于插入排序,它无法给出测试用例的输出

 import java.io.*;
import java.util.*;

public class Solution {

    public static void insertionSortPart2(int[] ar)
    {       
           // Fill up the code for the required logic here
           // Manipulate the array as required
           // The code for Input/Output is already provided
        int n =ar.length;
        for(int i=1;i<n;i++)
            {int k= ar[i];

             int j=i-1;
             while(ar[j]>k && j>-1)
                 {
                 ar[j+1]=ar[j];
                 j--;
             }
             ar[j+1]=k;
             printArray(ar);

        }
    }  



    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
       int s = in.nextInt();
       int[] ar = new int[s];
       for(int i=0;i<s;i++){
            ar[i]=in.nextInt(); 
       }
       insertionSortPart2(ar);    

    }    
    private static void printArray(int[] ar) {
      for(int n: ar){
         System.out.print(n+" ");
      }
        System.out.println("");
   }
}
import java.io.*;
导入java.util.*;
公共类解决方案{
公共静态无效插入端口2(int[]ar)
{       
//在此处填写所需逻辑的代码
//根据需要操作数组
//已经提供了输入/输出代码
int n=ar长度;
对于(int i=1;ik&&j>-1)
{
ar[j+1]=ar[j];
j--;
}
ar[j+1]=k;
打印阵列(ar);
}
}  
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int s=in.nextInt();
int[]ar=新的int[s];

for(int i=0;i问题在于while循环,这一行可能会出现异常
while(ar[j]>k&&j>-1)
。您尝试使用负索引访问数组,即-1。当您尝试访问数组下限或外部边界之外的元素时,会出现此异常

  • 当i为1时,j通过
    j=i-1
  • 进入while循环是因为[1]>a[0],即9>8
  • 做j,其中j的值变成-1
  • 您返回while(
    while(ar[j]>k&&j>-1)
    )尝试访问一个[j]ie..a[-1],因此您得到了双重异常的排列
在访问阵列之前,您可能需要检查j>-1,即从中反转while循环中的条件

while(ar[j]>k && j>-1)


while(ar[j]>k&&j>-1)
是我错过的一个主要的悬念
while(j>-1 && ar[j]>k)