Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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 - Fatal编程技术网

Java 正在合并数组但获取数组索引超出绑定异常

Java 正在合并数组但获取数组索引超出绑定异常,java,Java,我正在尝试合并两个排序的数组,即检查isA[I]小于B[j],然后创建一个数组C[k]来存储合并数组的新数组,但我的问题是我得到了一个java.lang.ArrayIndexOutOfBoundsException:如何解决此错误: 最后两个for循环是检查我们是否完成了A和B的比较,一些元素被左移到C。这里我假设A和B是排序的。m和n是数组的大小 如需任何帮助,请参见以下代码: 公共类合并数组{ public static void main(String[] args) { // T

我正在尝试合并两个排序的数组,即检查is
A[I]
小于
B[j]
,然后创建一个数组
C[k]
来存储合并数组的新数组,但我的问题是我得到了一个
java.lang.ArrayIndexOutOfBoundsException:
如何解决此错误:

最后两个for循环是检查我们是否完成了A和B的比较,一些元素被左移到C。这里我假设A和B是排序的。m和n是数组的大小

如需任何帮助,请参见以下代码:

公共类合并数组{

public static void main(String[] args) {
    // TODO Auto-generated method stub

    //given two arrays merge them

    int a [] = {2,8,15,18,19,20};
    int b [] = {5,9,12,17};

    System.out.println(Arrays.toString(mergeArrays(a,b,5,3)));
}

private static int[] mergeArrays(int[] A, int[] B, int m, int n) {
    // TODO Auto-generated method stub

    int i =1;
    int j = 1;
    int k = 1;
    int C [] = new int [1];

    while(i <= m && j <= n) {

        if(A[i] < B[j]) {

            C[k++] = A[i++];
        }else {
            C[k++] = B[j++];
        }
    }

    for(; i<=m ; i++) {
        C[k++] = A[i];
    }
    for(; j <= n; j++) {
        C[k++] = B[j];
    }

    return C;
}
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
//给定两个数组,合并它们
int a[]={2,8,15,18,19,20};
int b[]={5,9,12,17};
System.out.println(Arrays.toString(mergeArrays(a,b,5,3));
}
私有静态int[]合并数组(int[]A,int[]B,int m,int n){
//TODO自动生成的方法存根
int i=1;
int j=1;
int k=1;
int C[]=新int[1];

而(i在输入for循环之前,您不会重置计数器

编辑:您还将检查当前计数器是否小于或等于5,例如,这将导致索引越界错误,因为数组从索引0开始。但您还将尝试在括号“A[i++]”内获取递增的索引,这也将超过索引限制

edit2:您的“C[]”也被初始化为[1],这意味着它有以下索引:{0,1}。您将“k”计数器设置为1,但一旦您在“C[]”数组中找到一个索引,您就将k递增:“C[k++]”,现在您正试图获取不存在的索引2。请重写代码。我建议您使用内部计数器,只需使用_array_name.length()来获取数组长度。例如,for(int I=0;I
请在上面的行中提供正确的数组长度。您提供的数组长度为1,而k++/i++值超过了1,因此它提供了ArrayIndexOutOfBoundsException。

您有两个错误,我将指出,以便您可以修复它

  • 数组“C”大小应等于数组“A”的长度+数组“B”的长度
  • 在Java中,数组索引以0开始,以数组长度-1结束

    • 您可以创建这样的类

       public static void main(String[] args) {
              // TODO Auto-generated method stub
      
              //given two arrays merge them
      
              int a[] = {2, 8, 15, 18, 19, 20};
              int b[] = {5, 9, 12, 17};
      
              System.out.println(Arrays.toString(mergeArrays(a, b, a.length, b.length)));
          }
      
          private static int[] mergeArrays(int[] A, int[] B, int m, int n) {
      
              int[] C = null;
              if (m > n) {
                  C = A;
                  for (int i = 0; i < n; i++) {
                      if (A[i] < B[i]) {
                          C[i] = B[i];
                      }
                  }
              } else {
                  C = B;
                  for (int i = 0; i < n; i++) {
                      if (A[i] > B[i]) {
                          C[i] = A[i];
                      }
      
      
                  }
      
      
      
              }
              return C;
          }
      
      publicstaticvoidmain(字符串[]args){
      //TODO自动生成的方法存根
      //给定两个数组,合并它们
      INTA[]={2,8,15,18,19,20};
      int b[]={5,9,12,17};
      System.out.println(Arrays.toString(mergeArrays(a,b,a.length,b.length));
      }
      私有静态int[]合并数组(int[]A,int[]B,int m,int n){
      int[]C=null;
      如果(m>n){
      C=A;
      对于(int i=0;iB[i]){
      C[i]=A[i];
      }
      }
      }
      返回C;
      }
      
      的确是pstz duder,计数器从nada开始。
       public static void main(String[] args) {
              // TODO Auto-generated method stub
      
              //given two arrays merge them
      
              int a[] = {2, 8, 15, 18, 19, 20};
              int b[] = {5, 9, 12, 17};
      
              System.out.println(Arrays.toString(mergeArrays(a, b, a.length, b.length)));
          }
      
          private static int[] mergeArrays(int[] A, int[] B, int m, int n) {
      
              int[] C = null;
              if (m > n) {
                  C = A;
                  for (int i = 0; i < n; i++) {
                      if (A[i] < B[i]) {
                          C[i] = B[i];
                      }
                  }
              } else {
                  C = B;
                  for (int i = 0; i < n; i++) {
                      if (A[i] > B[i]) {
                          C[i] = A[i];
                      }
      
      
                  }
      
      
      
              }
              return C;
          }