Java数组排序判断代码解析及正确调用方法咨询
数组排序判断代码解析与调用修正
一、isSorted方法逻辑解析
先看你提供的isSorted方法代码:
public class array{ public boolean isSorted (int[] a){ int temp = a[0]; for (int i=1; i < a.length; i++) { if (temp < a[i]) temp = a[i]; else return false; } return true; } }
这段代码实际功能是判断数组是否为严格递增排列,并非你预期的降序判断,逻辑细节如下:
- 初始化
temp为数组第一个元素a[0] - 从索引1开始遍历数组后续元素:
- 如果当前元素
a[i]大于temp,说明符合递增要求,更新temp为当前元素后继续遍历 - 如果当前元素
a[i]小于或等于temp,直接返回false,表示数组不是严格递增
- 如果当前元素
- 遍历完成后返回
true,说明数组是严格递增的
如果要实现判断数组是否降序排列(允许相等的非递增),需要修改逻辑:
public boolean isSorted(int[] a) { int temp = a[0]; for (int i = 1; i < a.length; i++) { // 降序要求前一个元素 >= 当前元素,否则返回false if (temp < a[i]) { return false; } temp = a[i]; } return true; }
如果需要严格降序(前一个元素必须大于当前元素),则把判断条件改为temp <= a[i]。
二、main方法中正确调用isSorted的步骤
你当前的调用代码存在三个问题:
- 实例化的
WhileLoop类和定义isSorted方法的array类不匹配 - 调用
isSorted时没有传入要求的int[]类型参数 - 类名命名不符合Java规范(建议使用大驼峰,比如
ArrayDemo而非array)
修正后的调用示例(同类中包含main方法)
public class ArrayDemo { // 这里放你修正后的降序判断逻辑,或者原有的严格递增逻辑 public boolean isSorted(int[] a) { int temp = a[0]; for (int i = 1; i < a.length; i++) { if (temp < a[i]) { return false; } temp = a[i]; } return true; } public static void main(String[] args) { // 1. 实例化包含isSorted方法的类 ArrayDemo demo = new ArrayDemo(); // 2. 定义要测试的int数组 int[] descendingArray = {5, 4, 3, 2, 1}; // 降序数组 int[] nonDescendingArray = {1, 3, 2, 4}; // 非降序数组 // 3. 调用isSorted方法,传入数组参数,并接收返回结果 boolean isDesc1 = demo.isSorted(descendingArray); boolean isDesc2 = demo.isSorted(nonDescendingArray); // 4. 输出结果验证 System.out.println("数组5,4,3,2,1是否降序:" + isDesc1); // 输出true System.out.println("数组1,3,2,4是否降序:" + isDesc2); // 输出false } }
单独类中调用的示例
如果要把main方法放在单独的类中,确保ArrayDemo类可访问(同包或public修饰):
public class First { public static void main(String[] args) { ArrayDemo demo = new ArrayDemo(); int[] testArray = {9, 7, 7, 5}; boolean result = demo.isSorted(testArray); System.out.println("数组是否降序:" + result); } }
内容的提问来源于stack exchange,提问作者Bryan Heddle
相关产品推荐
相关产品推荐

