阶段性综合练习(动物乐园)

阶段性综合练习(动物乐园)

在这里插入图片描述

1.需求

展示所有动物相关信息(名字,腿条数,叫)

用户选择,进行修改动物信息的操作(名字,腿条数)

腿的条数输入错误的话,进行异常处理

2.分析

名词(类,属性):

动物(父类)

​ 属性:

动物的名字

动词(方法):叫

接口:获得腿的条数

鸭子,猫(子类)

海豚(子类)

业务类

初始化动物信息

修改动物信息

动物父类

package Zoo;

public abstract class Animal {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
    public Animal(){}
    public Animal(String name){
        this.name=name;
    }
    public abstract String shout();
}

有腿的动物接口

package Zoo;

public interface Leg {
    int getlegnumber();
}

鸭子类

package Zoo;

import Door.Door;

public class Dunck extends Animal implements Leg {
  int legnum;
    public String shout(){
        return  "嘎嘎嘎";
    }
  public   int getlegnumber(){
        return legnum;
  }
  public Dunck(){}
  public Dunck(String name,int leg){
        super(name);
        this.legnum=leg;
  }
}

海豚类

package Zoo;

public class Delphi extends Animal {
    public Delphi(){}
    public Delphi(String name){
        super(name);
    }

    public String shout() {
        return ("海豚音");
    }
}

猫类

package Zoo;

public class Cat extends Animal implements Leg {
    int legnum;
    public String shout(){
       return  "喵喵喵喵";
    }
    public   int getlegnumber(){
        return legnum;
    }
    public Cat(){}
    public Cat(String name,int leg){
        super(name);
        this.legnum=leg;
    }
}


业务类

package Zoo;

import java.util.Scanner;

/**
 * 业务类
 *
 * 初始化动物信息
 *
 * 修改动物信息
 * **/

public class AnimalMgr {
    Animal[] animal=new Animal[3];
    Scanner input=new Scanner(System.in);
    int choose;
    public void init(){
        animal[0]=new Cat("加菲猫",4);
        animal[1]=new Dunck("唐老鸭",2);
        animal[2]=new Delphi("琪琪");
    }
    public void show(){
        System.out.println("动物名字\t腿的条数\t动物叫");
      int leg;
      String name;
        for (Animal animal:animal){
            name=animal.getName();
            if (animal instanceof Leg){
                leg=((Leg) animal).getlegnumber();
            }else {
                 leg=0;
            }
            String shout=animal.shout();
            System.out.println(name+"\t\t"+leg+"\t\t\t"+shout);
        }
        System.out.println("是否继续修改数据:按0进行修改,其他数字退出");
        choose=input.nextInt();
    }
/**
 * 修改动物信息**/
public void modifyAnimal()throws Exception{
    String name[]=new String[3];
    int leg[]=new  int[2];
    System.out.println("请输入猫的名字");
    input.nextLine();
    name[0]=input.nextLine();
    System.out.println("请输入猫的腿条数");
    leg[0]=input.nextInt();
    if (leg[0]!=4){
        throw new Exception("猫只有四条腿");
    }
    System.out.println("请输入鸭子的名字");
    input.nextLine();
    name[1]=input.nextLine();
    System.out.println("请输入鸭子的腿条数");
    leg[1]=input.nextInt();
    if (leg[1]!=2){
        throw new Exception("鸭子只有两条腿");
    }
    System.out.println("请输入海豚的名字");
    input.nextLine();
    name[2]=input.nextLine();
    animal[0]=new Cat(name[0],leg[0]);
    animal[1]=new Dunck (name[1],leg[1]);
    animal[2]=new Delphi (name[2]);

}

    public static void main(String[] args) {
        AnimalMgr animalMgr=new AnimalMgr();
        animalMgr.init();
        do {
            animalMgr.show();
            if (animalMgr.choose==0){
                try {
                    animalMgr.modifyAnimal();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }while (animalMgr.choose==0);


    }
}

遇到的问题

14: Animal[] animal=new Animal[4];
18: animal[0]=new Cat("加菲猫",4);
19: animal[1]=new Dunck("唐老鸭",2);
20: animal[2]=new Delphi("琪琪");
26: for (Animal animal:animal){
27: name=animal.getName();
28: if (animal instanceof Leg){
29: leg=((Leg) animal).getlegnumber();
33: String shout=animal.shout();
42: AnimalMgr animalMgr=new AnimalMgr();
43: init();
44: show();

  • 在第14行,animal被声明为一个Animal类型的数组,并分配了4个元素的空间。
  • 在第18、19和20行,数组的前三个元素分别被初始化为CatDunckDelphi的实例。
  • 第26行开始了一个增强型for循环,用于遍历animal数组。

ring shout=animal.shout();
42: AnimalMgr animalMgr=new AnimalMgr();
43: init();
44: show();


- 在第14行,`animal`被声明为一个`Animal`类型的数组,并分配了4个元素的空间。
- 在第18、19和20行,数组的前三个元素分别被初始化为`Cat`、`Dunck`和`Delphi`的实例。
- 第26行开始了一个增强型for循环,用于遍历`animal`数组。

从这些信息来看,`animal`数组本身不应该为`null`,并且它的前三个元素已经被正确初始化。然而,第四个元素没有被初始化,这可能是导致空指针异常的原因。当增强型for循环尝试处理第四个元素时,由于它没有被初始化,所以是`null`,因此调用`getName()`时抛出了空指针异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

whc15059539669

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值