найти минимум но ноль

Как найти наименьшее положительное (ненулевое) число в массиве двойников? Например, если массив содержит 0.04, 0.0001 и 0.0, я хочу вернуть 0.0001.

Приведенная ниже функция хороша, но она возвращает ноль как минимум, что меня не интересует.

static double[] absOfSub = new double[100];
...

private static double compare(double[] ds) {
  double min = absOfSub[0];

  for (double d : ds) {
    min = Math.min(min, d);
  }
  return min;
}

Как я могу заставить его игнорировать нули?


person lonesome    schedule 29.04.2012    source источник
comment
Почему это неправильно? мне кажется, что это самое низкое число в массиве.   -  person MByD    schedule 29.04.2012
comment
@BinyaminSharet ты прокрутил вниз? разве 7,719277021974478E-73 меньше этого?   -  person lonesome    schedule 29.04.2012
comment
Нет-нет-нет, чем больше X в E-X, тем меньше число... это научная запись...   -  person MByD    schedule 29.04.2012
comment
@BinyaminSharet о, моя плохая математика :) хорошо, тогда твой ответ правильный :)   -  person lonesome    schedule 29.04.2012
comment
@lonesome Пожалуйста, проверьте мое редактирование и посмотрите, стало ли оно яснее и задает ли он правильный вопрос.   -  person Adam Liss    schedule 29.04.2012
comment
@AdamLiss да, это выглядит яснее :)   -  person lonesome    schedule 29.04.2012


Ответы (1)


Вы можете проверить на ноль:

double min = Double.MAX_VALUE;
for (double d : ds) 
{
    min = (d == 0) ? min : Math.min(min, d);
}
person MByD    schedule 29.04.2012
comment
разве это не должно быть Double.MIN_VALUE? - person lonesome; 29.04.2012
comment
Неа. если вы начнете с Double.MIN_VALUE, вы всегда получите его в результате (Double.MIN_VALUE), независимо от того, что содержит ваш массив, если вы начнете с Double.MAX_VALUE, вы получите самый низкий результат в массиве. - person MByD; 29.04.2012
comment
Я посмотрел, смотрите мой комментарий. - person MByD; 29.04.2012