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
相关产品推荐
相关产品推荐

