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