如何修复超出java代码界限的数组索引?

如何修复超出java代码界限的数组索引?,java,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 =

嘿,伙计们,有人能帮我解决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;
}
publicstaticdouble[]sortarr(double[]arr){
布尔performedSwap=true;
双模式值;
while(performedSwap){
performedSwap=false;
对于(int i=0;iarr[i+1]){
modeValue=arr[i];
arr[i]=arr[i+1];
arr[i+1]=模式值;
performedSwap=true;
}
}
}
返回arr;
}

如果
arr.length=0
(空数组),您的代码尝试使用
sortedar[0]
,则出现此异常。

您显然是在传递空数组

在检查
arr.length%2==0
之前添加一个额外条件,以查看
arr.length==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;  
}

sortarr(arr)
做什么?显然,您传递的是一个空数组。显示
main
函数的代码。sortarr(arr)有一个排序数的值。在故障行放置一个调试点,并确保
arr
不是空的。Bro my sorting函数有一个空数组要传递到另一个函数?不,不是你的排序函数。你的主函数。兄弟当我使用你的代码时,我的另一个函数受到了影响。你的哪个函数受到影响?兄弟,具体返回什么?这个函数受到了影响。公共静态双getMin(double[]arr){double min=arr[0],max=arr[0];}那么,来自
calculatemedia
函数的结果将用于其他函数吗?