Метод isSorted не работает во всех случаях ... не знаю почему - PullRequest
0 голосов
/ 14 апреля 2011

Вот основная форма вопроса:

Напишите метод isSorted, который принимает массив значений типа double в качестве параметра и возвращает true, если они отсортированы, или false, если это не так.

Вот мой код:

public static boolean isSorted(double[] a){
   if (a.length == 1){
      return true;
   }
   boolean apples = false;
   int i = 1;
   while (i <= a.length-1){
      if (a[i] > a[i-1]){
         apples = true;
      } else {
         apples = false;
      }
      i++;
   }
   return apples;
}

при передаче двойного массива {16.1, 12.3, 22.2, 14.4}, {1.5, 4.3, 7.0, 19.5, 25.1, 46.2} или {42.0} возвращает false, true, true соответственно. Однако, когда передается массив {1.5, 4.3, 7.0, 19.5, 7.8, 25.1, 46.2}, он возвращает true, когда должен возвращать false.

Ответы [ 5 ]

4 голосов
/ 14 апреля 2011

Более поздние случаи a[i] > a[i-1] (=> apples = true) перезаписывают случаи, когда apples устанавливается в false.Нет необходимости повторять итерацию после того, как вы нашли один случай, в котором a[i] не меньше, чем a[i+1].

Прочая очистка

  • Это случай использования, в которомцикл for чище использовать, чем цикл while.
  • Вы должны обрабатывать пустые массивы.
  • Предполагая, что массив может содержать повторяющиеся элементы, вам необходимо (правильно) обработатьслучай, когда a[i] === a[i-1].

Этот метод выполняет все вышеперечисленное:

public static boolean isSorted(double[] a){
    if (a.length < 2) return true;

    for (int i=1; i < a.length; i++) {
       if (a[i] < a[i-1]){
          return false;
       }
    }
    return true;
 }

Редактировать: о, а почему вы назвали возвращаемую переменную apples?Это не имеет никакого смысла в контексте метода и намекает на небрежное кодирование.

2 голосов
/ 14 апреля 2011

После присвоения apples = false; в else, нет необходимости повторять дальше. Просто поместите break в else.

1 голос
/ 14 апреля 2011

Почти хорошо, предлагаю добавить перерыв:

  if (a[i] > a[i-1]){
     apples = true;
  } else {
     apples = false;
     break; // <--
  }
0 голосов
/ 14 апреля 2011

Если при ложном значении вы должны сломать или вернуть.

0 голосов
/ 14 апреля 2011

Ваш метод возвращает результат сравнения ПОСЛЕДНЕГО, поскольку вы не завершаете работу при обнаружении неупорядоченного состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...