我目前正在创建一个简单的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]。感谢。
答案 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'的值的索引。