终于敲完了!请老师和同学们过目!请问还有可以完善的地方吗?^V^

终于敲完了!请老师和同学们过目!请问还有可以完善的地方吗?^V^

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        ShowList.showList();
        Scanner sc = new Scanner(System.in);
        int n1, n2;
        boolean flag = false;
        while (true){        //利用while大循环,把整个节目内容整体包括(这一步很关键!)
            if (flag) {      //在选择完节目后,进行判断,只有当flag为true时,才输出提示语句
                System.out.println("******      是否继续观看(1/0)      ******");
                n1=sc.nextInt();
                switch (n1) {
                    case 1:
                        ShowList.showList();
                        break;
                    case 0:
                        System.out.println("******      欢迎下次光临~      ******");
                        System.exit(1);         //若n1为0,终止程序
                    default:
                        System.out.println("******      输入信息不正确,请重新输入      ******");
                        ShowList.showList();
                        break;
                }
            }
                n2 = sc.nextInt();                  //节目选项
                switch (n2) {
                    case 1:
                        Animal bear = new Bear();  //利用向上转型,父类引用指向子类对象
                        ((Bear) bear).act();       //向下转型(强制转换)调用act方法
                        flag = true;               //为了能通过上面的if语句,从而输出提示语句,把flag变成true
                        break;
                    case 2:
                        Animal lion = new Lion("公狮", "灰色");
                        ((Lion) lion).act();
                        flag = true;
                        break;
                    case 3:
                        Animal monkey = new Monkey("金丝猴");
                        ((Monkey) monkey).act();
                        flag = true;
                        break;
                    case 4:
                        Animal parrot = new Parrot("牡丹鹦鹉");
                        ((Parrot) parrot).act();
                        flag = true;
                        break;
                    case 5:
                        Clown clown = new Clown("Kahle", 5);
                        clown.act();
                        flag = true;
                        break;
                    default:
                        System.out.println("******      输入信息不正确,请重新输入      ******");
                        ShowList.showList();
                        break;
                }
            }
        }
    }
=========================================================
public class ShowList {
    public static void showList() {
        System.out.println("********欢迎来到太阳马戏团********");
        System.out.println("********请选择表演者********");
        System.out.println("********      1、棕熊      ********");
        System.out.println("********      2、狮子      ********");
        System.out.println("********      3、猴子      ********");
        System.out.println("********      4、鹦鹉      ********");
        System.out.println("********      5、小丑      ********");
    }
}
=========================================================
public abstract class Animal {
    private String name;
    private int age;

    public Animal(){ //父类Animal中必须有构造方法,否则会报错!虽然没有内容,但很重要!

    }

    public Animal(String name,int age){
        this.setName(name);
        this.setAge(age);
    }
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public abstract void love();
}
=========================================================
public  class  Bear  extends  Animal implements  IAct{

    public Bear(){
        super("Bill",1);
    }
    @Override
    public void skill() {
        System.out.println("技能:挽着花篮,打着雨伞,自立走秀");
    }
    @Override
    public void love() {
        System.out.println("爱好:喜欢卖萌");
    }
    @Override
    public void act() {
       System.out.println("表演者:"+getName());
       System.out.println("年龄:"+getAge()+"岁");
       this.skill();
       this.love();
        }
}
=========================================================
public  class Lion extends Animal implements IAct {

    private  String color;
    private  String sex;

    public Lion(String sex,String color){
        super("Lain",2);
        this.setSex(sex);
        this.setColor(color);
    }
    @Override
    public void skill() {
        System.out.println("技能:擅长钻火圈");
    }

    @Override
    public void act() {
        System.out.println("表演者:"+getName());
        System.out.println("年龄:"+getAge()+"岁");
        System.out.println("性别:"+this.getSex());
        System.out.println("毛色:"+this.getColor());
        this.skill();
        this.love();
    }

    @Override
    public void love() {
        System.out.println("爱好:喜欢吃各种肉类");
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}
=========================================================
public  class Monkey extends Animal implements IAct {
    private  String type;

    public Monkey(String type){
        super("Tom",1);
        this.setType(type);
    }

    @Override
    public void skill() {
        System.out.println("技能:骑独轮车过独木桥");
    }

    @Override
    public void act() {
        System.out.println("表演者:"+getName());
        System.out.println("年龄:"+getAge()+"岁");
        System.out.println("品种:"+getType());
        this.skill();
        this.love();
    }

    @Override
    public void love() {
        System.out.println("喜欢模仿人的动作表情");
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}
=========================================================
public  class Parrot extends Animal implements IAct {
    private  String type;

    public Parrot(String type){
        super("Rose",1);
        this.setType(type);
    }
    @Override
    public void skill() {
        System.out.println("技能:擅长模仿");
    }

    @Override
    public void act() {
        System.out.println("表演者:"+getName());
        System.out.println("年龄:"+getAge()+"岁");
        System.out.println("品种:"+getType());
        this.skill();
        this.love();
    }
    @Override
    public void love() {
        System.out.println("爱好:喜欢吃坚果和松子");
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}
=========================================================
public  class Clown  implements IAct {
    private String name;
    private int years;

    public Clown(String name,int years){
        this.setName(name);
        this.setYears(years);
    }
    @Override
    public void skill() {
        System.out.println("技能:脚踩高跷,进行杂技魔术表演");
    }
    public void dress(){
        System.out.println("着装:身穿五彩服装,头上戴着彩色的帽子,脸上画着夸张的彩妆");
    }
    @Override
    public void act() {
        System.out.println("表演者:"+getName());
        System.out.println("艺龄:"+getYears()+"年");
        this.dress();
        this.skill();
    }

    public String getName() {
        return name;
    }

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

    public int getYears() {
        return years;
    }

    public void setYears(int years) {
        this.years = years;
    }
}
=========================================================
public interface IAct {
     void skill() ;
     void act();
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
qq_皮尔斯_1 2019-04-23 02:22:16

我这没有电脑可愁死我了

  • 同学,还是要在电脑上练习的,否则知识点没办法掌握牢靠,学编程就是要多写代码。祝:学习愉快!
    2019-04-23 09:52:38
吃吃吃鱼的猫 2019-04-20 15:18:28

同学你好,你的理解是正确的哦~如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

好帮手慕珊 2019-04-20 10:57:36

你好!代码整体上完成得不错,存在的一些问题和建议如下:

1、建议每个实现类中定义带参构造方法,不是直接在此处为成员变量赋值,而是在Test类中完成。

http://img1.sycdn.imooc.com//climg/5cba88d00001265603050093.jpg

构造方法形式如下:

http://img1.sycdn.imooc.com//climg/5cba891300011f4503660077.jpg

2、不是定义Animal引用指向子类对象,而是定义IAct引用指向子类对象,然后直接调用act方法。如:IAct actor=null; actor=new Bear("Bill",1);actor.act();

为了体现多态,不能去直接创建实现类的对象,应该先声明一个接口的引用,如:IAct actor=null;然后在case 语句后面进行对象的创建,如case 1后的代码为:actor= new Bear("Bill", 1);

最后act方法的调用写在switch结构的外面,即actor.act();

从上述的流程上看,通过接口的引用指向了子类的对象,最后去调用act()方法,因为actor引用指向的对象不同,调用act()方法就会输出不同的结果。这就是多态的体现。

http://img1.sycdn.imooc.com//climg/5cba897b0001c03a07650283.jpg

3、继续输入的问题,建议把代码写到switch结构的下面,当输入错误后一直继续输入,直到输入正确才显示菜单,思路如下:

定义一个boolean值,初始值为true

使用while循环,当boolean值为true时,执行如下操作:

1)输出提示信息是否继续观看

2)switch结构,当输入数据为1时,boolean值设置为false

     当输入为0时,提示欢迎下次光临

     当输入0/1以外的值时,提示输入不正确,重新输入

4、这个问题,按照上面去改,循环开始显示菜单,不做继续输入的判断,继续输入的判断写到switch下面

http://img1.sycdn.imooc.com//climg/5cba8a650001791d07000090.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 键盘上的莫扎特 #1
    首先谢谢老师给出了这么多建议,老师辛苦了! 老师我还有个问题想问您, 在通过接口的引用指向了子类的对象时:IAct actor=null;为什么先要给引用赋值为空?为什么不直接 IAct actor=new Bear("Bill",1); 按我的理解是:因为在进入到其他case中,actor都要重置一次,否则它一直都是Bear的引用,老师我理解的对吗?
    2019-04-20 11:59:31
提问者 键盘上的莫扎特 2019-04-19 21:09:30

老师,我第10行代码用if语句判断,再利用switch调出节目单,感觉有点麻烦,因为在下面那个switch循环中,我每一个case中都加了flag=true,请问还有其他的方法吗?


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师