java练习题

44 阅读2分钟

一,题目

一、基类设计 定义抽象类Animal,包含私有属性:name(名称)、age(年龄) 包含抽象方法say()(发声) 包含公共方法showInfo()(显示基本信息) 二、派生类实现 创建Dog和Cat类继承Animal Dog类添加属性height(身高) Cat类添加属性weight(体重) 分别实现say()方法(小狗汪汪汪 小猫喵喵喵) 三、管理系统功能 使用ArrayList管理所有动物 实现以下功能: 1.添加动物(需防止重复名称) 2.根据名称删除动物 3.显示所有动物信息(调用多态方法) 4.统计不同种类动物数量 四、异常处理 1.处理年龄输入非数字的情况 2.处理空集合时的操作提示 五、控制台菜单 自定义1个控制台菜单


// 1,
public abstract class Animal {
    private String name;
    private int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public abstract void say();

    public void showInfo() {
        System.out.println("名称:" + name + " 年龄:" + age);
    }

    // Getter/Setter
    public String getName() { return name; }
    public int getAge() { return age; }
}

// 2,
public abstract class Animal {
    private String name;
    private int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public abstract void say();

    public void showInfo() {
        System.out.println("名称:" + name + " 年龄:" + age);
    }

    // Getter/Setter
    public String getName() { return name; }
    public int getAge() { return age; }
}



// 3,
public class Dog extends Animal {
    private double height;

    public Dog(String name, int age, double height) {
        super(name, age);
        this.height = height;
    }

    @Override
    public void say() {
        System.out.println("汪汪汪~~~!");
    }

    @Override
    public void showInfo() {
        super.showInfo();
        System.out.println("种类:狗 身高为:" + height + "cm");
    }
}

// 4,
import java.util.*;

public class ZooManager {
    private final List<Animal> animals = new ArrayList<>();
    private final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        new ZooManager().run();
    }

    private void run() {
        while (true) {
            printMenu();
            try {
                int choice = Integer.parseInt(scanner.nextLine());
                switch (choice) {
                    case 1:
                        addAnimal();
                        break;
//                    case 2 : deleteAnimal();break;
                    case 3:
                        showAllAnimals();
                        break;
                    case 4:
                        countAnimals();
                        break;
                    case 0:
                        System.exit(0);
                        break;
                    default:
                        System.out.println("无效输入!");
                        break;
                }
            } catch (NumberFormatException e) {
                System.out.println("请输入数字!");
            }
        }
    }

    private void printMenu() {
        System.out.println("========动物园管理系统========");
        System.out.println("1.添加动物");
        System.out.println("2.删除动物");
        System.out.println("3.显示所有动物");
        System.out.println("4.统计动物数量");
        System.out.println("0.退出");
    }

    private void addAnimal() {
        System.out.print("输入动物类型(1.狗 2.猫):");
        int type = Integer.parseInt(scanner.nextLine());

        System.out.print("输入名称:");
        String name = scanner.nextLine();
        if (animals.stream().anyMatch(a -> a.getName().equals(name))) {
            System.out.println("名称重复!");
            return;
        }

        try {
            System.out.print("输入年龄:");
            int age = Integer.parseInt(scanner.nextLine());

            if (type == 1) {
                System.out.print("输入身高(cm):");
                double height = Double.parseDouble(scanner.nextLine());
                animals.add(new Dog(name, age, height));
            } else {
                System.out.print("输入体重(kg):");
                double weight = Double.parseDouble(scanner.nextLine());
                animals.add(new Cat(name, age, weight));
            }
            System.out.println("添加成功!");
        } catch (NumberFormatException e) {
            System.out.println("输入格式错误!");
        }
    }

    private void showAllAnimals() {
        if (animals.isEmpty()) {
            System.out.println("动物园没有动物!");
            return;
        }
        animals.forEach(animal -> {
            animal.showInfo();
            animal.say();
            System.out.println("------------");
        });
    }

    private void countAnimals() {
        long dogs = animals.stream().filter(a -> a instanceof Dog).count();
        System.out.printf("狗:%d只 猫:%d只\n",
                dogs, animals.size() - dogs);
    }

    /**
     * 根据动物名称删除动物
     */
    private void deleteAnimal() {
        if (animals.isEmpty()) {
            System.out.println("当前没有动物记录可删除!");
            return;
        }

        System.out.print("请输入要删除的动物名称:");
        String name = scanner.nextLine();

        // 使用迭代器安全删除
        Iterator<Animal> iterator = animals.iterator();
        boolean found = false;

        while (iterator.hasNext()) {
            Animal animal = iterator.next();
            if (animal.getName().equalsIgnoreCase(name)) {
                iterator.remove();
                found = true;
                System.out.println("成功删除动物:" + name);
                break; // 假设名称唯一,找到后立即退出
            }
        }

        if (!found) {
            System.out.println("未找到名称匹配的动物:" + name);
        }
    }
}