Java数组拒绝大值

时间:2016-01-09 15:47:45

标签: java arrays average

我目前正在创建一个简单的java应用程序,它在图形上读取4个噪声值的数组,然后计算平均值并在图形上绘制它。

我的目标是删除误报'通过拒绝任何超过其他3个结果平均值两倍的数组读数来确定值。

E.g:

Array [1] = 50
Array [2] = 48 
Array [3] = 53
Array [4] = 102  < Reject this value as it is more than twice the level of the average of the other 3 results (Average = 100.7)

如何在if语句中实现?因此忘记了“误报”。值?它可以是任何可以被拒绝的Array [x]。感谢。

2 个答案:

答案 0 :(得分:2)

我的回答与Clashsoft's非常相似,但从O(长度)而不是O(长度^ 2)的意义上来说效率稍高一些。

/* Returns the index of the false alarm if exists, otherwise -1 */
public static int falseAlarm(double[] array){
    int length = array.length;
    double total = 0;
    for (int i = 0; i < length; i++) {
        total += array[i];
    }

    for (int i = 0; i < length; i++) {
        double average = (total - array[i])/(length - 1);
        if (array[i] > average * 2)
            return i; // early return if false alarm is found
    }

    return -1;
}

答案 1 :(得分:1)

使用单个if语句无法解决此问题(至少不是以理智的方式)。但是,您可以使用for语句:

public static int falseAlarm(double[] values)
{
    final int length = values.length;
    for (int i = 0; i < length; i++)
    {
        double average = 0D
        for (int j = 0; j < length; j++)
        {
            if (j != i) average += values[j]
        }
        average /= length - 1

        final double value = values[i]
        if (value > average * 2)
        {
            return i; // i - false alarm index
        }
    }
    return -1; // no false alarm
}

上述方法返回表示'false alarm'的值的索引。