如何实现Zoo类organize方法按Weight排序Animal数组并输出?
解决方案
1. 补全Animal类的排序基础逻辑
先确保你的Animal类具备体重属性的访问方法,也可以直接实现Comparable接口定义默认排序规则:
public class Animal { private String name; private double weight; // 按实际类型调整,比如int // 构造方法、其他属性的getter/setter public double getWeight() { return weight; } public String getName() { return name; } // 实现Comparable接口,默认按体重升序排序 @Override public int compareTo(Animal other) { if (other == null) return 1; // 降序排序就反过来:Double.compare(other.getWeight(), this.weight) return Double.compare(this.weight, other.getWeight()); } }
2. 实现Zoo类的organize排序方法
Zoo类只负责排序内部的Animal数组,不包含任何打印逻辑,通过getter方法让外部获取排序后的数组:
import java.util.Arrays; public class Zoo { private Animal[] animals; public Zoo(Animal[] animals) { this.animals = animals; } public void organize() { // 避免空数组/空指针情况 if (animals == null || animals.length <= 1) { return; } // 方式1:用Animal实现的Comparable规则排序 Arrays.sort(animals); // 方式2:不想修改Animal类的话,用匿名Comparator排序 /* Arrays.sort(animals, (a1, a2) -> { if (a1 == null) return 1; if (a2 == null) return -1; return Double.compare(a1.getWeight(), a2.getWeight()); }); */ } // 提供获取排序后数组的方法 public Animal[] getAnimals() { return animals; } }
3. 完善Test类的菜单选项2逻辑
在Test类的选项2中,调用Zoo的排序方法后,单独处理打印逻辑:
import java.util.Scanner; public class Test { public static void main(String[] args) { // 初始化示例数据 Animal[] animals = { new Animal("狮子", 180.0), new Animal("兔子", 2.5), new Animal("大象", 4800.0) }; Zoo zoo = new Zoo(animals); Scanner scanner = new Scanner(System.in); int choice; do { System.out.println("=== 动物园管理菜单 ==="); System.out.println("1. 查看所有动物"); System.out.println("2. 按体重排序动物"); System.out.println("3. 退出"); System.out.print("请输入选项:"); choice = scanner.nextInt(); switch (choice) { case 1: printAnimalList(zoo.getAnimals()); break; case 2: zoo.organize(); // 触发排序 System.out.println("已按体重完成排序,结果如下:"); printAnimalList(zoo.getAnimals()); break; case 3: System.out.println("程序退出"); break; default: System.out.println("无效选项,请重新输入"); } } while (choice != 3); scanner.close(); } // 单独的打印方法,统一处理输出 private static void printAnimalList(Animal[] animals) { if (animals == null || animals.length == 0) { System.out.println("暂无动物信息"); return; } for (Animal animal : animals) { if (animal != null) { System.out.printf("动物名称:%s,体重:%.1fkg%n", animal.getName(), animal.getWeight()); } } } }
常见问题排查
- 之前用
Arrays.sort无效?先检查:- Animal数组是否为null或长度小于2,这种情况下sort不会执行
compareTo/compare方法的返回值逻辑是否正确(升序/降序搞反会导致排序结果不符合预期)- 是否没通过Zoo的
getAnimals方法获取排序后的数组,直接用了旧的数组引用
内容的提问来源于stack exchange,提问作者Julian Bocanegra
相关产品推荐
相关产品推荐

