Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中值误差_Java - Fatal编程技术网

Java中值误差

Java中值误差,java,Java,我需要你帮我写一段代码。我想计算一个数组的中值。最初的类型都是整数,它用整数除法计算中值,这给了我一个错误的答案。我将所有内容都更改为double,但我收到一个类型不匹配错误,表示我无法将double转换为int,这是没有意义的。有人能帮忙吗。这是我的代码: public class MedianTest { public static void main(String[] args) { double median = 0; double myValues[]

我需要你帮我写一段代码。我想计算一个数组的中值。最初的类型都是整数,它用整数除法计算中值,这给了我一个错误的答案。我将所有内容都更改为double,但我收到一个类型不匹配错误,表示我无法将double转换为int,这是没有意义的。有人能帮忙吗。这是我的代码:

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个元素的列表中安全。。。