【问题标题】:Boolean method to check array is sorted in java检查数组的布尔方法在java中排序
【发布时间】:2020-07-08 19:37:38
【问题描述】:

我正在编写一个方法来检查一个 double 类型的数组在 Java 中是否按数字升序。但是,我不明白为什么我必须交换放置return truereturn 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;
}

【问题讨论】:

    标签: java arrays algorithm sorting for-loop


    【解决方案1】:

    你可以引用它,就好像任何一个元素都大于它的下一个元素,数组是没有排序的,在功能上可以表示为

    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]);
    }
    

    【讨论】:

    • 谢谢,我还没有开始学习函数式,但以后会这样做
    【解决方案2】:

    您在第一个 if 语句主体调用时返回,这意味着您正在检查前两个元素是否已排序。你应该返回false,如果有一个连续的对,那是没有排序的。如果你遍历整个数组并且没有找到这样的对,那么数组就被排序了。这应该可以完成工作:

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

    【讨论】:

    • 表示如果任何元素大于其下一个元素,则数组不排序
    • @Andronicus 如果您阅读了for 循环的作用。可以说,我在评论中所说的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 2016-09-03
    • 2014-06-11
    • 1970-01-01
    • 2020-01-16
    • 2015-04-14
    • 2016-01-11
    相关资源
    最近更新 更多