Java中值误差
我需要你帮我写一段代码。我想计算一个数组的中值。最初的类型都是整数,它用整数除法计算中值,这给了我一个错误的答案。我将所有内容都更改为double,但我收到一个类型不匹配错误,表示我无法将double转换为int,这是没有意义的。有人能帮忙吗。这是我的代码:Java中值误差,java,Java,我需要你帮我写一段代码。我想计算一个数组的中值。最初的类型都是整数,它用整数除法计算中值,这给了我一个错误的答案。我将所有内容都更改为double,但我收到一个类型不匹配错误,表示我无法将double转换为int,这是没有意义的。有人能帮忙吗。这是我的代码: public class MedianTest { public static void main(String[] args) { double median = 0; double myValues[]
public class MedianTest {
public static void main(String[] args) {
double median = 0;
double myValues[] = { 1, 2, 3, 4 };
double arrayHalfOdd = ((myValues.length - 1) / 2) + 1;
double arrayHalfEven = ((myValues.length - 1) / 2);
if ((myValues.length - 1) % 2 == 0) {
median = (myValues[arrayHalfEven] + myValues[arrayHalfEven + 1]) / 2;
} else {
median = myValues[arrayHalfOdd];
}
System.out.print(median);
}
}
错误在myValues[ArrayHalf偶]和myValues[ArrayHalf奇]中
顺便说一下,这不是家庭作业您不能使用double作为数组索引:arrayHalfOdd和arrayhalf偶
让那些家伙成为整数。你不能使用双精度作为数组索引:arrayHalfOdd和arrayhalf偶
让那些家伙输入。如果我理解正确,你可以使用Math.round(双d)或Math.trunc(双d)
如果我理解正确,您可以使用Math.round(双d)或Math.trunc(双d)
您正在使用双值对数组进行索引
arrayhalf偶
和arrayHalfOdd
您正在使用双值对数组进行索引arrayhalf偶
和arrayHalfOdd最终答案:
if (myValues.length == 0) {
throw new IllegalStateException();
}
else if (myValues.length == 1) {
return myValues[0];
}
else {
int halfRoundedUp = myValues.length / 2;
if (myValues.length % 2 == 0) { // even count, average the middle values
return (myValues[halfRoundedUp - 1] + myValues[halfRoundedUp]) / 2;
}
else { // odd, take the middle value
return myValues[halfRoundedUp];
}
}
最后答覆:
if (myValues.length == 0) {
throw new IllegalStateException();
}
else if (myValues.length == 1) {
return myValues[0];
}
else {
int halfRoundedUp = myValues.length / 2;
if (myValues.length % 2 == 0) { // even count, average the middle values
return (myValues[halfRoundedUp - 1] + myValues[halfRoundedUp]) / 2;
}
else { // odd, take the middle value
return myValues[halfRoundedUp];
}
}
这条线
median = (myValues[arrayHalfEven] + myValues[arrayHalfEven + 1]) / 2;
这条线呢
median = myValues[arrayHalfOdd];
正在使用双变量arrayhalf偶和arrayHalfOdd作为数组索引。如果编译器允许双数组索引,您可以尝试访问非整数数组索引(例如数组[1.5])处的位置,这将导致疯狂的内存访问复杂性。因此,它会抛出一个错误
幸运的是,arrayhalf偶和arrayHalfOdd的类型并不影响编译器是否使用整数除法
只有当方程的分子和分母都是整数时,才会发生整数除法。数组索引不是分子或分母的一部分;他们正在从你的数组中选择分子
因此,如果数组的元素(分子)是双倍的,则不会得到整数除法。如果希望它们是整数,仍然可以通过将文字分母设置为双精度来防止整数除法,如下所示:
median = (myValues[arrayHalfEven] + myValues[arrayHalfEven + 1]) / 2.0;
即使数组项是整数,也不会得到整数除法。此行
median = (myValues[arrayHalfEven] + myValues[arrayHalfEven + 1]) / 2;
这条线呢
median = myValues[arrayHalfOdd];
正在使用双变量arrayhalf偶和arrayHalfOdd作为数组索引。如果编译器允许双数组索引,您可以尝试访问非整数数组索引(例如数组[1.5])处的位置,这将导致疯狂的内存访问复杂性。因此,它会抛出一个错误
幸运的是,arrayhalf偶和arrayHalfOdd的类型并不影响编译器是否使用整数除法
只有当方程的分子和分母都是整数时,才会发生整数除法。数组索引不是分子或分母的一部分;他们正在从你的数组中选择分子
因此,如果数组的元素(分子)是双倍的,则不会得到整数除法。如果希望它们是整数,仍然可以通过将文字分母设置为双精度来防止整数除法,如下所示:
median = (myValues[arrayHalfEven] + myValues[arrayHalfEven + 1]) / 2.0;
这样,即使数组项是整数,也不会得到整数除法。不要忘记让代码在只有1个元素的列表中安全…不要忘记让代码在只有1个元素的列表中安全。。。