合并数组,但使数组索引超出绑定异常

时间:2018-12-22 03:50:14

标签: java

我正在尝试合并两个排序的数组,即检查Sub calculate Dim startdate As Date Dim loopdate As Date Dim i As Integer Dim currentdate As Date Dim datearray() As Date currentdate = Date If currentdate = "20/12/2018" Then startdate = currentdate + CDate("00:00") currentdate = currentdate + CDate("07:29") Else startdate = DateAdd("d", -1, currentdate) + CDate("07:30") currentdate = currentdate + CDate("07:29") End If For loopdate = startdate To currentdate If loopdate <= currentdate Then ReDim Preserve datearray(0 To i) datearray(i) = DateValue(loopdate) i = i + 1 End If Next End Sub 小于A[i]然后创建一个数组B[j]来存储合并数组的新数组,但是我的问题是是我收到C[k]时该如何解决此错误:

最后两个for循环用于检查我们是否已完成对A和B的比较,是否还有一些元素将它们移至C。在这里,我假设A和B已排序。 m和n是数组的大小。

任何帮助将不胜感激,下面的代码:

公共类MergeArrays {

java.lang.ArrayIndexOutOfBoundsException:

}

4 个答案:

答案 0 :(得分:0)

在进入for循环之前,您无需重置计数器。

edit:例如,您还正在检查当前计数器是否小于或等于5,这将使索引超出范围错误,因为数组从索引0开始。但是,您也尝试在其中增加索引您的方括号“ A [i ++]”也将超过索引限制。

edit2:您的“ C []”也以[1]的大小首写,这意味着它具有以下索引:{0,1}。您将“ k”计数器设置为1,但是一旦到达“ C []”数组中的索引,就将k递增:“ C [k ++]”,现在您尝试达到的索引2不会存在。重写您的代码。我建议您使用内部计数器,仅使用your_array_name.length()即可获取数组长度。例如。 for(int i = 0; i

答案 1 :(得分:0)

int C [] = new int [8];

请在上面的行中提供适当的数组长度。您要提供的数组长度为1,而k ++ / i ++的值超过1,因此它给出了ArrayIndexOutOfBoundsException。

答案 2 :(得分:0)

您正在做一些错误,我会指出,以便您可以解决它。

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

答案 3 :(得分:0)

您可以创建这样的课程

 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;
    }