3

我编写了一个代码来从排序数组中查找中间元素。这是我的代码的一部分:

Java Code:
int[] a = {1,2,3,4,5};
int x = a.length;
        if (x % 2 != 0){
            int mid = 0 + x/2;
            System.out.println("The Middle Element is : " + a[mid]);
        }

我得到了正确的输出,但想知道我应该在上面代码的 else 条件中写什么?换句话说,如果 a.length 是偶数,我应该怎么做才能找到中间元素?这可能吗?

4

5 回答 5

9

我们无法为您回答这个问题。这取决于您的要求。以下是一些选项:

  • 返回中间的两个。
  • 返回中间的较早选项。
  • 抛出无法以偶数长度调用该方法的异常。
  • 等等
于 2013-05-12T22:40:05.967 回答
4

对此没有正确答案 - 偶数个值的中间值在单一意义上不存在 - 中间值介于 2 个中间值之间。答案取决于您想要达到的目标——我们不能告诉您取较低、较高或两者的中间值,因为我们不知道您想用它们做什么。一般来说,你有 5 个选项,但只有你可以做出选择,除非你给我们更多关于你在这里尝试做的事情的背景信息:

  • 返回较低的中间值。
  • 返回较高的中间值。
  • 返回上述两个值。
  • 抛出异常。
  • 什么都不做(这就是你的代码现在所做的)。
于 2013-05-12T22:48:38.743 回答
2

对于另一种方式,您必须将总数除以 2(如果您想要整个劣势(5 个元素为 2)或 +1 具有上级(5 个元素为 3)

你可以直接做:

int[] a = {1,2,3,4,5};

int x = a.length;
int mid = (int) x/2;
System.out.println("The Middle Element is : " + a[mid]);

这是当你没有中间时有中间或劣质的元素

如果您没有中间元素,您也可以在顶级元素中知道异常,并在必要时捕获它。

于 2013-05-12T22:42:38.290 回答
1

从数学上讲,寻找偶数组中位数的典型常见解决方案是计算两个最中间数字的平均值。(这里有一个简单的解释:http: //www.wikihow.com/Find-the-Median-of-a-Set-of-Numbers

但正如大家所说,没有正确的答案。就个人而言,我会选择平均选项,但请确保更改输出语句以使用户清楚地知道这是一个平均值,而不是实际数字。

于 2013-05-12T23:02:06.227 回答
0

两者都有 if-less 代码,用于产生(两个)中间元素的平均值:

int[] a = {1,2,3,4,5, ...};

int x = a.length;
int mid = x / 2;
int mid2 = (x + 1) / 2; // Possibly the same as mid
int middleValue = (a[mid] + a[mid2]) / 2;
System.out.println("The Middle Element is : " + middleValue);
于 2013-05-12T22:52:24.893 回答