如何不使用if语句判断数组是否有序 实现Java代码改造
原有代码问题说明
你提供的初始代码存在多处逻辑错误:
- 循环变量错误使用
double类型,数组索引本身为整型,强制类型转换没有必要还会引入精度风险 - 循环体执行第一次就触发
break,仅能判断前两个元素的大小关系,无法遍历整个数组 - 只要有一组相邻元素升序就标记为有序,逻辑完全错误:应该是所有相邻元素都满足升序才是有序数组
- 保留了
if判断,不符合你的需求
正确实现代码
以下是符合要求的、不使用if语句、采用while循环实现的版本:
public class IsSorted { public static void main(String[] args) { // 声明测试数组 double a[] = {1.5, 4.3, 7.0, 19.5, 25.1, 46.2}; int length = a.length; boolean isSorted; int index = 0; // 边界情况:数组元素数小于等于1默认有序,同时处理数组越界风险 if (length <= 1) { isSorted = true; } else { // while循环条件直接做判断,利用短路特性终止循环,不需要额外if语句 while (index < length - 1 && a[index] <= a[index + 1]) { index++; } // 循环结束后如果index走到了倒数第一个元素,说明所有相邻元素都满足升序 isSorted = index == length - 1; } System.out.println(isSorted); } }
如果要求全程完全不出现任何if关键字,可以利用布尔表达式的短路特性合并边界判断:
public class IsSorted { public static void main(String[] args) { double a[] = {1.5, 4.3, 7.0, 19.5, 25.1, 46.2}; int length = a.length; int index = 0; while (length > 1 && index < length - 1 && a[index] <= a[index + 1]) { index++; } boolean isSorted = length <= 1 || index == length - 1; System.out.println(isSorted); } }
实现逻辑说明
- 利用
while循环条件的短路与特性:只要出现a[index] > a[index+1]的情况,循环会直接终止,不需要额外if判断跳出 - 循环结束后只需判断索引是否走到了数组倒数第一位,就能确认数组是否全程满足升序规则
- 额外兼容了空数组、单元素数组的边界场景
内容的提问来源于stack exchange,提问作者Mallick
相关产品推荐
相关产品推荐

