我怎样才能解决数组索引超出我的Java代码的界限?

时间:2018-12-04 08:27:30

标签: java

伙计们,有人可以帮我解决有关Java代码超出范围的数组索引的问题。下面是我的完整代码有问题。

public static double calculateMedian(double[] arr) {
    double[] sortedArr = sortarr(arr);

    double median;

    if (arr.length % 2 == 0) {
        int indexA = (arr.length-1) / 2;
        int indexB = (arr.length) / 2;

        median = ((double) (sortedArr[indexA] + sortedArr[indexB])) / 2; // this code has a error in index out of bounds.
    }   
    else {
        int index = (sortedArr.length - 1) / 2;
        median = sortedArr[ index ];
    }
    return median;  
}

这是我的排序功能

 public static double[] sortarr(double[] arr) {
    boolean performedSwap = true;
    double modeValue;

    while(performedSwap) {
        performedSwap = false;

        for (int i=0; i < arr.length-1; i++) {
            if (arr[i] > arr[i+1]) {
            modeValue = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = modeValue;

            performedSwap = true;
            }
        }
    }
    return arr;
}

3 个答案:

答案 0 :(得分:0)

如果arr.length = 0(空数组)您的代码尝试采用sortedArr[0],则您有此异常。

答案 1 :(得分:0)

您显然正在传递一个空数组。

在检查arr.length % 2 == 0以查看是否arr.length == 0之前添加一个附加条件。

在这种情况下,不确定要返回什么作为中位数。

答案 2 :(得分:0)

唯一可能发生错误的情况是数组为空。空数组的中位数为空,因为开头没有值。

public static double calculateMedian(double[] arr) {
    double[] sortedArr = sortarr(arr);

    double median;

    if (arr.length == 0) {
        return ; // return nothing if it is an empty array
    } else if (arr.length % 2 == 0) {
        int indexA = (arr.length-1) / 2;
        int indexB = (arr.length) / 2;

        median = ((double) (sortedArr[indexA] + sortedArr[indexB])) / 2; // this code has a error in index out of bounds.
    } else {
        int index = (sortedArr.length - 1) / 2;
        median = sortedArr[ index ];
    }
    return median;  
}