Логический метод проверки массива отсортирован в java - PullRequest
1 голос
/ 28 марта 2020

Я пишу метод для проверки числового возрастания массива типа double в Java. Тем не менее, я не понимаю, почему я должен поменять местами return true и return false, чтобы мой код работал. Конечно, я могу оставить все как есть, и оно все равно должно работать? Что я не понимаю?

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

Ответы [ 2 ]

2 голосов
/ 28 марта 2020

Вы можете заключить его в кавычки, как если бы любой элемент был больше, чем его следующий элемент, массив не отсортирован , который мог бы быть функционально представлен как

public static boolean isSorted(double[] arr) {
    return !IntStream.range(0, arr.length - 1)
            .anyMatch(i -> arr[i] > arr[i + 1]);
}

Другими словами, для сортировки массива необходимо убедиться, что ни один из ваших элементов не должен удовлетворять условию, что он больше, чем число рядом с массивом .

Следовательно, лучший функциональный способ написания этого будет:

public static boolean isSorted(double[] arr) {
    return IntStream.range(0, arr.length - 1)
            .noneMatch(i -> arr[i] > arr[i + 1]);
}
1 голос
/ 28 марта 2020

Вы возвращаетесь при первом вызове тела оператора if, что означает, что вы проверяете, отсортированы ли первые два элемента. Вы должны скорее вернуть false, если есть последовательная пара, которая не отсортирована. Если вы go прошли через весь массив, и такая пара не найдена, то массив будет отсортирован. Это должно сделать работу:

for (int i = 0; i < arr.length-1; i++) {
    if (arr[i] > arr[i + 1]) {
        return false;
    }
}
return true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...