7.2作业评讲问题

7.2作业评讲问题

1
<br>

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
    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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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