7.2作业评讲问题

7.2作业评讲问题


package com.daniu.Test;


import java.util.Scanner;


import com.daniu.Kind.*;


public class Test {

public void info() {

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 main(String[] args) {

// TODO Auto-generated method stub

IAct actor =null;

Bear b1=new Bear("Bill",1);

Monkey m1=new Monkey("Tom",1,"金丝猴");

Parrot p1=new Parrot("Rose",1,"牡丹鹦鹉");

Lion l1=new Lion("Lain",2,"灰色","公狮");

Clown c1=new Clown("Kahle",5);

Scanner sc=new Scanner(System.in);

Test t1=new Test();

boolean label =true;

while (1==1)  {

t1.info();

if (label==true) {

int n=sc.nextInt();

if (n<=5) {

switch(n) {

case 1:

actor=new Bear("Bill",1);

b1.love();break;

case 2:

actor=new Lion("Lain",2,"灰色","公狮");

l1.love();break;

case 3:

actor=new Monkey("Tom",1,"金丝猴");

m1.love();break;

case 4:

actor=new Parrot("Rose",1,"牡丹鹦鹉");

p1.love();break;

case 5:

actor=new Clown("Kahle",5);

c1.dress();;break;

}

actor.act();actor.skill();

label=false;

}else {

System.out.println("选择表演者错误,请重新输入");

}

}else {

System.out.println("*****是否继续观看(0/1)*****");

int n1=sc.nextInt();

if (n1!=0&&n1!=1) {

System.out.println("**输入信息不正确,请重新输入**");

}else if (n1==1) {

label=true;

}else if (n1==0) {

System.out.println("*****欢迎下次光临*****");

return ;

}

}

}

}

}

应该先声明一个接口的引用,如:IAct actor=null;然后在case 语句后面进行对象的创建,如case 1后的代码为:actor= new Bear("Bill", 1);然后act方法的调用写在switch结构的外面,即actor.act();从上述的代码上看,通过接口的引用指向了子类的对象,最后去调用act()方法,因为actor引用指向的对象不同,调用act()方法就会输出不同的结果


1、如上代码根据老师点评后修改,不知道是不是这样修改,如果是这样修改,那输出的文本顺序不对了,先输出了爱好,表演者在后面了。。

2、接口申明后,类似子类这种是否还需要实例化对象?

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

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

2回答
提问者 代码知音 2018-03-06 19:31:43
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		IAct actor =null;
		Scanner sc=new Scanner(System.in);		
		Test t1=new Test();
		boolean label =true;
		while (true)  {
			if (label) {
				t1.info();
				int n=sc.nextInt();
//				if (n<=5) {
					switch(n) {
					case 1:
						actor=new Bear("Bill",1);actor.act();label=false;break;
					case 2:
						actor=new Lion("Lain",2,"灰色","公狮");actor.act();label=false;break;
					case 3:
						actor=new Monkey("Tom",1,"金丝猴");actor.act();label=false;break;
					case 4:
						actor=new Parrot("Rose",1,"牡丹鹦鹉");actor.act();label=false;break;
					case 5:
						actor=new Clown("Kahle",5);actor.act();label=false;break;
					default :
						System.out.println("输入错误,请重新输入");
						break;
					}
//				}else {
//						System.out.println("选择表演者错误,请重新输入");

			}else {
				System.out.println("*****是否继续观看(0/1)*****");
				int n1=sc.nextInt();
				if (n1!=0&&n1!=1) {
					System.out.println("**输入信息不正确,请重新输入**");
				}else if (n1==1) {
					label=true;
				}else if (n1==0) {
					System.out.println("*****欢迎下次光临*****");
					return ;
				}
			}
		}
	}
}


irista23 2018-03-06 17:59:23

1、case语句后面进行对象的创建保留,之前的Bear b1=new Bear("Bill",1);……创建代码就可以去掉了。

2、if (n<=5) {}条件可以去掉,用switch(n)语句中的default来接收无效输入,default中提示重新输入并使用continue继续下次循环。

3、可以将相对独立的功能封装成方法,代码可读性更高。

4、可以使用while(true)代替while (1==1),使用if (label)代替if (label==true),代码效率更高。

  • 提问者 代码知音 #1
    那父类Animal的抽象方法,love() 这个怎么调用呢?
    2018-03-06 19:07:51
  • irista23 回复 提问者 代码知音 #2
    子类中的act()方法里可以调用love()
    2018-03-06 19:09:51
  • 提问者 代码知音 回复 irista23 #3
    public static void main(String[] args) { // TODO Auto-generated method stub IAct actor =null; Scanner sc=new Scanner(System.in); Test t1=new Test(); boolean label =true; while (true) { if (label) { t1.info(); int n=sc.nextInt(); // if (n<=5) { switch(n) { case 1: actor=new Bear("Bill",1);actor.act();label=false;break; case 2: actor=new Lion("Lain",2,"灰色","公狮");actor.act();label=false;break; case 3: actor=new Monkey("Tom",1,"金丝猴");actor.act();label=false;break; case 4: actor=new Parrot("Rose",1,"牡丹鹦鹉");actor.act();label=false;break; case 5: actor=new Clown("Kahle",5);actor.act();label=false;break; default : System.out.println("输入错误,请重新输入"); break; } // }else { // System.out.println("选择表演者错误,请重新输入"); }else { System.out.println("*****是否继续观看(0/1)*****"); int n1=sc.nextInt(); if (n1!=0&&n1!=1) { System.out.println("**输入信息不正确,请重新输入**"); }else if (n1==1) { label=true; }else if (n1==0) { System.out.println("*****欢迎下次光临*****"); return ; } } } } } 那像这个label false 怎么去写呢?想不到更好的办法了,只能每个case里加一个了。。。
    2018-03-06 19:30:54
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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