You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java判断数组是否为升序/降序的代码问题如何修复

现有代码存在的问题

  • 核心逻辑错误:循环中每次相邻比较都会重写结果变量的值,最终返回结果仅由最后一对相邻元素的比较结果决定,前面出现的不符合排序规则的情况会被后续结果覆盖。
  • 数组越界风险:降序判断的循环边界写为i <= field.length,当i = field.length - 1时,i+1会超出数组下标范围,直接触发ArrayIndexOutOfBoundsException。
  • 冗余判断:else if(!isAscending)可以直接简化为else,布尔值非true即false,无需额外判断。
  • 你给出的数组定义存在笔误:int[] field = new int[9]声明数组长度为9,但你给出的元素有10个,实际应该声明为new int[10]。

优化后的代码

优化思路:初始默认数组为有序状态,只要找到任意一处不符合排序规则的相邻元素,就直接标记为无序并提前跳出循环,避免无效遍历,同时统一循环边界防止越界。

public static boolean isSorted(int[] field, boolean isAscending) {
    // 空数组、长度为1的数组默认视为有序,可根据需求调整该逻辑
    if (field == null || field.length <= 1) {
        return true;
    }
    boolean sorted = true;
    for (int i = 0; i < field.length - 1; i++) {
        if (isAscending) {
            if (field[i] > field[i + 1]) {
                sorted = false;
                break;
            }
        } else {
            if (field[i] < field[i + 1]) {
                sorted = false;
                break;
            }
        }
    }
    return sorted;
}

用你给出的测试数组{1,2,3,4,5,6,7,8,9,0}验证:传入isAscending=true时会在9和0比较时判定不符合升序规则返回false,传入isAscending=false时会在1和2比较时判定不符合降序规则返回false,完全符合预期。

内容的提问来源于stack exchange,提问作者maxig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:45:09