Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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 Arraycopy使我的程序崩溃_Java_Recursion_Mergesort_Arrays - Fatal编程技术网

Java Arraycopy使我的程序崩溃

Java Arraycopy使我的程序崩溃,java,recursion,mergesort,arrays,Java,Recursion,Mergesort,Arrays,我正在做一个家庭作业,我必须根据我们的书psuedo代码的作者实现一个合并排序。(算法基础,第四版,由那不勒斯人和奈米普尔出版) 从main方法调用mergeSort,int n是数组的长度,S[]是需要排序的数组。S[]已由1到999之间的随机数填充。我的程序在merge中的最后一次arraycopy时崩溃了,我不知道为什么会这样,我已经尝试在netbeans中调试。我觉得这可能是一个愚蠢的错误,我就是看不出来。任何帮助都会很好。提前谢谢 public static void mergesor

我正在做一个家庭作业,我必须根据我们的书psuedo代码的作者实现一个合并排序。(算法基础,第四版,由那不勒斯人和奈米普尔出版)

从main方法调用mergeSort,int n是数组的长度,S[]是需要排序的数组。S[]已由1到999之间的随机数填充。我的程序在merge中的最后一次arraycopy时崩溃了,我不知道为什么会这样,我已经尝试在netbeans中调试。我觉得这可能是一个愚蠢的错误,我就是看不出来。任何帮助都会很好。提前谢谢

public static void mergesort (int n, int S[])
   {
      if(n>1){
         final int h=n/2, m=n-h;
         int U[] = new int[h];
         int V[] = new int[m];
         System.arraycopy(S, 0, U, 0, h);
         System.arraycopy(S, h, V, 0, m);
         mergesort(h, U);
         mergesort(m, V);
         merge(h, m, U, V, S);
      }
   }
   public static void merge(int h, int m, final int U[], final int V[], final int S[])
   {
      int i=0, j=0, k=0;
      while(i<h && j<m){
         if(U[i]<V[j]) {
            S[k] = U[i];
            i++;
         }
         else {
            S[k]=V[j];
            j++;
         }
         k++;
      }
      if(i>h)
         System.arraycopy(V, j, S, k, h+m);
      else
         System.arraycopy(U, i, S, k, h+m);
   }
公共静态void合并排序(int n,int S[]
{
如果(n>1){
最终整数h=n/2,m=n-h;
int U[]=新的int[h];
int V[]=新的int[m];
系统阵列拷贝(S,0,U,0,h);
系统阵列副本(S、h、V、0、m);
合并排序(h,U);
合并排序(m,V);
合并(h、m、U、V、S);
}
}
公共静态无效合并(int h、int m、final int U[]、final int V[]、final int S[])
{
int i=0,j=0,k=0;

而(i检验它,它是一个指数。
原因是您在ArrayCopy中提供的长度大于源数组的计数。

发布stacktrace(Exception.printStacktrace())。这可能是堆栈溢出、内存不足或索引超出范围……此外,请在其上标记家庭作业,以便我们不会给出完整的解决方案:)。祝您好运!
   public static void merge(int h, int m, final int U[], final int V[], int S[])
   {
      int i=0, j=0, k=0;
      while(i<h && j<m){
         if(U[i]<V[j]) {
            S[k] = U[i];
            i++;
         }
         else {
            S[k]=V[j];
            j++;
         }
         k++;
      }
      if(i>=h)
         System.arraycopy(V, j, S, k, m-j);
      else
         System.arraycopy(U, i, S, k, h-i);
   }