Логическое объяснение

1

Я хочу создать метод, который проверяет, отсортирован ли массив, с наименьшим целым числом в начале массива и самым большим в конце. Я назвал последовательность массива.

public boolean isSorted(){
   int i = 1;
   while(i < sequence.length && sequence[i] >= sequence[i-1]){
      i++;
   }
   return i >= sequence.length;
}

Я добрался до этого кода с помощью друга, но я не совсем понимаю его. Что возвращается как логическое? Насколько я понял, прочитав на других сообщениях, он вернет true только тогда, когда i> = sequence.length. Учитывая условия на время, я буду больше или то же, что и sequence.length, только когда массив отсортирован.

Я прав? Извините, если мое форматирование ужасное, я все еще новичок в stackoverflow.

  • 0
    Да, ты прав.
  • 0
    Отлично, большое спасибо!
Показать ещё 2 комментария
Теги:
arrays
boolean
sorted

3 ответа

0
Лучший ответ

Кажется, что цикл прерывается, как только несоответствие (позиция, в которой доказывается, что массив не сортируется по мере сортировки соседей по отношению к желаемому порядку). Если цикл не прерывается, но заканчивается, точка несоответствия указывает после последнего символа, что означает отсутствие рассогласования.

2

Возможно, рефакторинг метода таким образом сделает код менее сложным и читаемым:

public boolean isSorted(int[] sequence) {
    for (int idx = 1; idx < sequence.length; idx++) {
        if (sequence[idx] < sequence[idx-1]) return false;
    }
    return true;
 }
0

Ты прав. Петля проверяет каждую пару соседних элементов в массиве. Если каждый элемент больше, чем предыдущий, он должен быть отсортирован. Если какая-либо пара не выполняет условие, цикл прерывается немедленно, оставляя i который меньше, чем sequence.length, поэтому условие i >= sequence.length сообщает вам, что весь массив был успешно обработан и должен быть правильно отсортирован.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню