Java 数组拒绝大值

标签 java arrays average

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

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

例如:

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 语句中实现这一点?这样它就会忘记“误报”值吗?它可以是任何可以被拒绝的数组 [x]。谢谢。

最佳答案

我的答案与 Clashsoft's 非常相似,但效率稍微高一些,因为它是 O(length) 而不是 O(length^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;
}

关于Java 数组拒绝大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34695526/

相关文章:

java - 在 else-if 循环中比较字符串和变量时出现问题

java - 在java中的字节流上创建滚动窗口

java - 有没有类似array[1 :] in java?的东西

c - 将数组分配给 C 中的函数指针参数

java - 如何根据 "last modified"计算每小时的文档数

php - 从 Laravel 4 中的数据库获取平均值

java - JNDI LDAP 搜索递归

java - 如何使用Java删除字符串中的重复空格?

Javascript 关系数据库

R:计算不规则的1分钟时间序列中的1小时平均值