Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Average - Fatal编程技术网

Java数组拒绝大值

Java数组拒绝大值,java,arrays,average,Java,Arrays,Average,我目前正在创建一个简单的java应用程序,它在一个图上读取一个由4个噪声值组成的数组,然后计算平均值并将其绘制在图上 我的目标是通过拒绝任何超过其他3个结果平均值两倍的数组读数来消除“假警报”值 例如: 数组[1]=50 数组[2]=48 数组[3]=53 数组[4]=102

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

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

例如:

数组[1]=50
数组[2]=48
数组[3]=53
数组[4]=102<拒绝此值,因为它是其他3个结果平均值的两倍以上(平均值=100.7)

如何在if语句中实现这一点?以至于它忘记了“假警报”值?它可以是任何可能被拒绝的数组[x]。谢谢。

您不能用一个
if
语句解决这个问题(至少不是以正常的方式)。但是,您可以对语句使用

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
}
公共静态int虚警(双[]值)
{
最终整数长度=values.length;
for(int i=0;i平均值*2)
{
返回i;//i-虚警索引
}
}
return-1;//无虚警
}

上述方法返回表示“假警报”的值的索引。

您不能用一个
if
语句(至少不能以正常的方式)解决此问题。但是,您可以对
语句使用

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
}
公共静态int虚警(双[]值)
{
最终整数长度=values.length;
for(int i=0;i平均值*2)
{
返回i;//i-虚警索引
}
}
return-1;//无虚警
}

上面的方法返回表示“假警报”的值的索引。

我的答案与非常相似,但从O(长度)而不是O(长度^2)的意义上讲,效率稍高一些

/*返回假警报的索引(如果存在),否则返回-1*/
公共静态int虚警(双[]阵列){
int length=array.length;
双倍合计=0;
for(int i=0;i平均值*2)
return i;//如果发现错误报警,则提前返回
}
返回-1;
}

我的答案与非常相似,但从O(长度)而不是O(长度^2)的意义上讲,效率略高一些

/*返回假警报的索引(如果存在),否则返回-1*/
公共静态int虚警(双[]阵列){
int length=array.length;
双倍合计=0;
for(int i=0;i平均值*2)
return i;//如果发现错误报警,则提前返回
}
返回-1;
}

循环遍历每个索引,计算除该索引外的所有其他索引的平均值,并检查其是否与谓词匹配。
如果(数组[3]>(数组[0]+数组[1]+数组[2])/3)
注意数组以第0个索引开始,但是初始化的数组数量因构造函数而异,因此我无法在语句中设置特定的数字。它只需要拒绝任何被证明为2*(所有其他数组的平均值)的数组[x]。因为您想排除平均值中的最高值,我将搜索最高值,计算其他数组的平均值,然后检查此最高值是否与平均值相符。然后,您可以重复此步骤,直到不再发现任何“假警报”。循环遍历每个索引,计算除该索引外的所有其他索引的平均值,并检查其是否与谓词匹配。
if(数组[3]>(数组[0]+数组[1]+数组[2])/3)
注意数组以第0个索引开始,但是初始化的数组数量因构造函数而异,因此我无法在语句中设置特定的数字。它只需要拒绝任何被证明为2*(所有其他数组的平均值)的数组[x]。因为您想排除平均值中的最高值,我将搜索最高值,计算其他数组的平均值,然后检查此最高值是否与平均值相符。然后,您可以重复此步骤,直到不再发现任何“假警报”。
/* 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;
}