请老师看看根据任务要求哪些地方不对,需要怎么改正?
package com.imooc.animal;
public abstract class Animal {
private String name;// 昵称
private int age;// 年龄
public abstract void love();// 喜好抽象
public Animal() {
}
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 Animal(String name, int age) {
this.setName(name);
this.setAge(age);
}
}package com.imooc.animal;
public interface IAct {
void skill();//技能
void act();//描述表演
}package com.imooc.animal;
public class Bear extends Animal implements IAct {
public Bear(String name, int age) {
this.setName(name);
this.setAge(age);
}
public Bear() {
}
@Override
public void skill() {
System.out.println("技能:挽着花篮,打着雨伞,自立走秀");
}
@Override
public void love() {
System.out.println("爱好:喜欢卖萌");
}
@Override
public void act() {
System.out.println("表演者:" + this.getName());
System.out.println("年龄:" + this.getAge() + "岁");
skill();
love();
}
}package com.imooc.animal;
public class Lion extends Animal implements IAct {
private String color;// 毛色
private String sex;// 性别
public Lion() {
}
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 Lion(String name, int age, String color, String sex) {
this.setName(name);
this.setAge(age);
this.setColor(color);
this.setSex(sex);
}
@Override
public void skill() {
System.out.println("技能:擅长钻火圈");
}
@Override
public void love() {
System.out.println("爱好:喜欢吃各种肉类");
}
@Override
public void act() {
System.out.println("表演者:" + this.getName());
System.out.println("年龄:" + this.getAge() + "岁");
System.out.println("性别:" + this.getSex());
System.out.println("毛色:" + this.getColor());
skill();
love();
}
}package com.imooc.animal;
public class Monkey extends Animal implements IAct {
private String type;//品种
public Monkey() {
}
public Monkey(String name,int age,String Type) {
this.setName(name);
this.setAge(age);
this.setType(Type);
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public void skill() {
System.out.println("技能:骑独轮车过独木桥");
}
@Override
public void love() {
System.out.println("爱好:喜欢模仿人的动作表情");
}
@Override
public void act() {
System.out.println("表演者:" + this.getName());
System.out.println("年龄:" + this.getAge() + "岁");
System.out.println("品种:" + this.getType());
skill();
love();
}
}package com.imooc.animal;
public class Parrot extends Animal implements IAct {
private String type;//品种
public Parrot() {
}
public Parrot(String name, int age, String type) {
this.setName(name);
this.setAge(age);
this.setType(type);
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public void skill() {
System.out.println("技能:擅长模仿");
}
@Override
public void love() {
System.out.println("爱好:喜欢吃坚果和松子");
}
@Override
public void act() {
System.out.println("表演者:" + this.getName());
System.out.println("年龄:" + this.getAge() + "岁");
System.out.println("品种:" + this.getType());
skill();
love();
}
}package com.imooc.animal;
public class Clown extends Animal implements IAct {
private int years;// 艺龄
public Clown() {
}
public Clown(String name, int years) {
this.setName(name);
this.setYears(years);
}
public int getYears() {
return years;
}
public void setYears(int years) {
this.years = years;
}
public void dress() {
System.out.println("着装:身穿五彩服装,头上戴着彩的色帽子,脸上画着夸张的彩妆");
}
@Override
public void skill() {
System.out.println("技能:脚踩高跷,进行杂技魔术表演");
}
@Override
public void love() {
// TODO 自动生成的方法存根
}
@Override
public void act() {
System.out.println("表演者:" + this.getName());
System.out.println("艺龄:" + this.getYears() + "年");
dress();
skill();
}
}package com.imooc.test;
import java.util.InputMismatchException;
import java.util.Scanner;
import com.imooc.animal.Bear;
import com.imooc.animal.Clown;
import com.imooc.animal.IAct;
import com.imooc.animal.Lion;
import com.imooc.animal.Monkey;
import com.imooc.animal.Parrot;
public class Test {
/**
*
* 提示信息
*/
public void displayMenu() {
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 void prompt() {
Scanner sc = new Scanner(System.in);
int c = 0;
System.out.println();
System.out.println("****** 是否继续观看(1/0) ******");
c = sc.nextInt();
if (c == 1) {
return;
} else {
if (c == 0) {
System.out.println("******* 欢迎下次光临 ******");
return;
}
}
}
public static void main(String[] args) {
Test menu = new Test();
Scanner sc = new Scanner(System.in);
int ab = 0;
while (true) {
menu.displayMenu();
try {
ab = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("输入的数据格式有误,不能有非数字!请重新选择需要观看的节目");
sc.next();
continue;
}
switch (ab) {
case 1:
if (sc != null) {
IAct one = new Bear("Bill", 1);
one.act();
menu.prompt();
}
break;
case 2:
if (sc != null) {
IAct two = new Lion("Lain", 2, "灰色", "公狮");
two.act();
menu.prompt();
}
break;
case 3:
if (sc != null) {
IAct three = new Monkey("Tom", 1, "金丝猴");
three.act();
menu.prompt();
}
break;
case 4:
if (sc != null) {
IAct four = new Parrot("Rose", 1, "牡丹鹦鹉");
four.act();
menu.prompt();
}
break;
case 5:
if (sc != null) {
IAct fives = new Clown("Kahle", 5);
fives.act();
menu.prompt();
}
return;
default:
System.out.println("输入的值必须是1-5范围的值!");
}
}
}
}正在回答
首先1,非常抱歉,之前老师给同学的截图中第一个红框的地方多写了break。建议去掉
2、关于输入英文后让用户重新输入,可以和输入菜单时的处理方法一致,如下图第二个红框所示,放在try里,如果输入非数字,则抛出异常,执行catch中的代码。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1、同学你好,同学是否想问,如何使让用户输入是否继续的时候,输入除0和1之外的数字外,重新展示这个继续输入的菜单?
例如下图所示:

如果是的:
首先,我们要想,既然这样,说明它有个循环判断的过程,,如此,我们便把该方法先注释掉:


我们在switch结构的下边,外层while循环的里边,写一个小循环,当用户输入对了,则跳出该循环,如果输入不对,则一直在此循环中。

2、
为了体现多态,不建议去直接创建实现类的对象,应该先声明一个接口的引用,如:IAct actor=null;然后在case 语句后面进行对象的创建,如case 1后的代码为:actor= new Bear("Bill", 1); 在default 中将actor置为null。
最后act方法的调用写在switch结构的外面,即即if(actor!=null){actor.act(); }
从上述的流程上看,通过接口的引用指向了子类的对象,最后去调用act()方法,因为actor引用指向的对象不同,调用act()方法就会输出不同的结果。这就是多态的体现。


3、Clown不需要继承Animal,只实现IAct接口即可。
4、同学这里不用判断if(sc!=null)因为在if中咱们没有调用 sc呦,并且,sc 是Scanner对象,一般也不会为null呦。
5、之前给同学带来不好的学习体验感到非常抱歉,也建议同学可以在提问的时候,也描述一下同学的疑惑,也便于老师更好的定位同学的疑惑。再次感到十分抱歉。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程


恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星