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

如何实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:20:46