伙计们,有人可以帮我解决有关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;
}
答案 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;
}