关于作业的问题

关于作业的问题

package com.imooc.test;

import java.util.Scanner;

import com.imooc.model.*;

public class Test {
	public static void notice(){
		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 static void continueOrNot(){
		boolean b=true;
		while(b){
			System.out.println("******   是否继续观看(1/0)   ******");
			Scanner s1=new Scanner(System.in);
			int d1=s1.nextInt();
			switch(d1){
			case 0:
				System.out.println("*******   欢迎下次光临      ******");
				System.exit(0);
			case 1:
				b=false;
				break;
				
			}
			if(d1!=1&&d1!=0){
				System.out.println("信息输入有误,请重新输入!");
			}
		}
	}
	
	public static void main(String[] args){
		IAct actor=null;
		while(true){
			notice();
			Scanner input=new Scanner(System.in);
			int sc=input.nextInt(); 	
			if(sc<1||sc>5)
				System.out.println("输入有误,请重新输入!");
			switch(sc){
				case 1:
					actor=new Bear("Bill",1);
					break;
				case 2:		
					actor=new Lion("Lain",2,"公狮","灰色");
					break;
				case 3:					
					actor=new Monkey("Tom",1,"金丝猴");
					break;
				case 4:					
					actor=new Parrot("Rose",1,"牡丹鹦鹉");
					break;
				case 5:					
					actor=new Clown("Kahle",5);
					break;		
				}
			actor.act();
			continueOrNot();
			}
		}
	}
	
	

讲师点评:作业整体完成得很好,但没有体现多态。为了体现多态,不能去直接创建实现类的对象,应该先声明一个接口的引用,如:IAct actor=null;然后在case 语句后面进行对象的创建,如case 1后的代码为:actor= new Bear("Bill", 1); 最后act方法的调用写在switch结构的外面,即actor.act(); 从上述的流程上看,通过接口的引用指向了子类的对象,最后去调用act()方法,因为actor引用指向的对象不同,调用act()方法就会输出不同的结果。这就是多态的体现。在你的代码中,可以将default语句去掉,在switch结构上面写一条if语句,如果输入的数据小于1或者大于5就要给出输入错误的提示。把act()和continueOrNot()方法的调用写到了switch结构的外面。另外,IACT写成IAct更符合代码规范。如果对作业有疑问,可以在问答区提问,我们的助教会帮助解决问题。祝学习愉快!

————————————————

http://img1.sycdn.imooc.com/climg/59e5d3020001204805530798.jpg问题一:如何修改才能使得第一次输入错误也给出错误提示?如果我直接输入100,会有空指针报错

问题二:如上图,第一次输入正确,重新观看,再输入错误,就反复执行上面的结果,为什么。。。?怎样修改?

问题三:上面的是用接口的引用指向了子类的对象,能不能用父类的引用指向子类对象?是因为IAct是五个演员都引用的吗?如果用父类指向四只动物,接口指向小丑可以吗?

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

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

1回答
一叶知秋519 2017-10-17 18:27:34

问题1::将actor.act();写到case语句中创建对象的后面;

问题2:修改第一个问题后,我试了下第二个问题,没有发现错误;

问题3:如果使用Animal创建子类对象,则调用不到实现的IAct接口中的act方法。

祝学习愉快~

  • 提问者 Homo_sapiensQ #1
    那点评老师为什么让把act()方法放到switch语句后面……
    2017-10-17 19:17:28
  • Tender10 回复 提问者 Homo_sapiensQ #2
    将actor.act();方法放在对应的case语句中,那么对应的动物表演者就会调用对应的act()方法,展示相关的信息,你可以先修改一下尝试,看是否还有问题。
    2017-10-17 19:42:29
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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