2016-01-09 3 views
0

В настоящее время я создаю простое приложение java, которое считывает массив из четырех значений шума на графике, а затем вычисляет среднее значение и отображает это на графике.Java Array Reject Large Values ​​

Я собираюсь удалить значения «ложной тревоги», отклонив показания массива, которые более чем в два раза превышают средние результаты других 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) 

Как это может быть реализовано в рамках, если заявление? Так что он забывает о значении «ложной тревоги»? Это может быть любой массив [x], который может быть отклонен. Благодарю.

+0

Прокрутите каждый индекс, вычислите среднее значение для всех других индексов * за исключением * этого и проверьте, соответствует ли он предикату. – Clashsoft

+0

'if (Array [3]> (Array [0] + Array [1] + Array [2])/3)' Примечание массив начинается с 0-го индекса – SMA

+0

Спасибо, но количество инициализированных массивов зависит от конструктора, поэтому I не может устанавливать определенные числа в инструкции. Ему просто нужно отклонить любой массив [x], который оказывается равным 2 * (средний для всех остальных массивов). – StackMeUp123

ответ

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 
} 

выше метод возвращает индекс значения, которое представляет собой «ложную тревогу».

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; 
} 
Смежные вопросы