关于继续观看表演的判断问题?
来源:7-2 作业题
Watchsnet
2019-06-12 13:14:54
作业给我最懵逼的地方就是继续观看的判断问题,参考了老师和其他同学的代码,终于也有了一些思路,自己又进行了一些改动。表面上效果是达到了,但是不知道这样的判断方式会不会有什么隐形问题?各判断方法中也加入了我自己的理解,希望老师能给出意见。判断方法是在Test类中的nextDisplay()方法。
package com.watch.circus;
/**
* 1.抽象父类:
* 动物(Animal)
* 属性:昵称(name)、年龄(age)
* 抽象方法:描述喜好(love)
* @author Administrator
*/
public abstract class Animial {
//私有属性:昵称(name)、年龄(age)
private String name;
private int age;
//无参构造
public Animial() {
}
//双参构造
public Animial(String name,int age) {
this.setName(name);
this.setAge(age);
}
//getter/setter方法
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;
}
/**
* 抽象方法 描述喜好(love)
*/
public abstract String love();
}package com.watch.circus;
/**
* 2. 接口
* 表演(IAct)
* 抽象方法:描述技能(skill)、描述表演(act)
* 说明: 每个表演者的表演信息是通过调用act()方法输出的
* @author Administrator
*/
public interface IAct {
/**
* 描述技能(skill)
*/
public String skill();
/**
* 描述表演(act)
*/
public void act();
}package com.watch.circus;
/**
* 表演者:Bill(棕熊)
* 年龄:1岁
* 技能:挽着花篮,打着玉兰,自立走秀
* 爱好:喜欢卖萌
* @author Administrator
*/
public class Bear extends Animial implements IAct{
//无参构造
public Bear() {
}
//双参构造
public Bear(String name,int age) {
super(name, age);
}
@Override
public String skill() {
String str="挽着花篮,打着玉兰,自立走秀";
return str;
}
@Override
public void act() {
System.out.println("表演者:"+this.getName()+"(棕熊)");
System.out.println("年龄:"+this.getAge()+"岁");
System.out.println("技能:"+this.skill());
System.out.println("爱好:"+this.love());
}
@Override
public String love() {
String str="喜欢卖萌";
return str;
}
}package com.watch.circus;
/**
* 表演者:Lain(狮子)
* 年龄:2岁
* 性别:公狮
* 毛色:灰色
* 技能:擅长钻火圈
* 爱好:喜欢吃各种肉类
* @author Administrator
*/
public class Lion extends Animial implements IAct{
private String sex;
private String color;
//无参构造
public Lion() {
}
//双参构造
public Lion(String name,int age,String sex,String color) {
super(name, age);
this.setSex(sex);
this.setColor(color);
}
//封装
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String skill() {
String str="擅长钻火圈";
return str;
}
@Override
public void act() {
System.out.println("表演者:"+this.getName()+"(狮子)");
System.out.println("年龄:"+this.getAge()+"岁");
System.out.println("性别:"+this.getSex());
System.out.println("毛色:"+this.getColor());
System.out.println("技能:"+this.skill());
System.out.println("爱好:"+this.love());
}
@Override
public String love() {
String str="喜欢吃各种肉类";
return str;
}
}package com.watch.circus;
/**
* 表演者:Tom(猴子)
* 年龄:1岁
*品种:金丝猴
* 技能:骑独轮车过独木桥
* 爱好:喜欢模仿人的动作表情
* @author Administrator
*/
public class Monkey extends Animial implements IAct{
private String kind;//品种
//无参构造
public Monkey() {
}
//双参构造
public Monkey(String name,int age,String kind) {
super(name, age);
this.setKind(kind);
}
//封装
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
@Override
public String skill() {
String str="骑独轮车过独木桥";
return str;
}
@Override
public void act() {
System.out.println("表演者:"+this.getName()+"(猴子)");
System.out.println("年龄:"+this.getAge()+"岁");
System.out.println("品种:"+this.getKind());
System.out.println("技能:"+this.skill());
System.out.println("爱好:"+this.love());
}
@Override
public String love() {
String str="喜欢模仿人的动作表情";
return str;
}
}package com.watch.circus;
/**
* 表演者:Rose(鹦鹉)
* 年龄:1岁
*品种:牡丹鹦鹉
* 技能:擅长模仿
* 爱好:喜欢吃坚果和松子
* @author Administrator
*/
public class Parrot extends Animial implements IAct{
private String kind;//品种
//无参构造
public Parrot() {
}
//双参构造
public Parrot(String name,int age,String kind) {
super(name, age);
this.setKind(kind);
}
//封装
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
@Override
public String skill() {
String str="擅长模仿";
return str;
}
@Override
public void act() {
System.out.println("表演者:"+this.getName()+"(鹦鹉)");
System.out.println("年龄:"+this.getAge()+"岁");
System.out.println("品种:"+this.getKind());
System.out.println("技能:"+this.skill());
System.out.println("爱好:"+this.love());
}
@Override
public String love() {
String str="喜欢吃坚果和松子";
return str;
}
}package com.watch.circus;
/**
* 表演者:Kahle(小丑)
* 艺龄:5年
* 着装:身穿五彩服装,头上戴着彩色的帽子,脸上画着夸张的彩妆
* 技能:脚踩高跷,进行杂技魔术表演
* @author Administrator
*/
public class Clown implements IAct{
private String name;
private int year;
//无参构造
public Clown() {
}
//双参构造
public Clown(String name,int year) {
this.setName(name);
this.setYear(year);
}
//getter/setter方法 封装
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public String dress() {
String str="身穿五彩服装,头上戴着彩色的帽子,脸上画着夸张的彩妆";
return str;
}
@Override
public String skill() {
String str="脚踩高跷,进行杂技魔术表演";
return str;
}
@Override
public void act() {
System.out.println("表演者:"+this.getName()+"(我不是Animial!^_^)");
System.out.println("艺龄:"+this.getYear());
System.out.println("着装:"+this.dress());
System.out.println("技能:"+this.skill());
}
}package com.watch.test;
import java.util.Scanner;
import com.watch.circus.*;//所有circus包都调用了,直接*全部加载
public class Test {
// 无参构造方法
public Test() {
}
/**
* 主菜单方法:马戏团表演
*
* @param args
*/
public void mainDisplay() {
System.out.println();
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.小丑 ************");
System.out.println("************ 0.退出 ************");
System.out.print("请输入您的选择:");
}
/**
* 副菜单方法:是否继续观看。当输入为0时,返回0值,否则返回1
*
* @param args
*/
public int nextDisplay() {
Scanner sca = new Scanner(System.in);
int nextinput = 3;
System.out.println();
System.out.println("************是否继续观看?************");
System.out.println("************是:1************");
System.out.println("************否:0************");
System.out.print("请输入您的选择:");
while (nextinput != 0 && nextinput != 1) {
try {
nextinput = sca.nextInt();
} catch (java.util.InputMismatchException e) {
System.out.println("您的操作有误!请输入1或0重新操作!");
System.out.print("请重新输入您的选择:");
sca.next();
continue;
}
}
if (nextinput == 0)
return 0;
else
return 1;
}
/**
* 主方法按作业流程要求进行
* @param args
*/
public static void main(String[] args) {
//属性赋值,没有在观看时赋值,是考虑马戏团开业时,各动物和演员已经就位。属性参数已经明确。而非观影时才明确属性。
Bear bear=new Bear("Bill",1);
Lion lion =new Lion("Lain",2,"雄性","灰色");
Monkey monkey=new Monkey("Tom",1,"金丝猴");
Parrot parrot =new Parrot("Rose",1,"牡丹鹦鹉");
Clown person=new Clown("Kahle",5);
int input=1;//确立循环条件input,并赋值为1。当input!=0,则一直循环
Test test=new Test();
Scanner sc=new Scanner(System.in);
//确保循环终止机制
while(input!=0) {
test.mainDisplay();//调入主菜单
try {
input=sc.nextInt();
}catch(java.util.InputMismatchException e) {
System.out.println("您的操作有误!请输入0-5中的任意正整数重新操作!");
System.out.print("请重新输入您的选择:");
sc.next();
continue;
}
if(input==0)
System.out.println("感谢您的观看,欢迎下次再来!"); //主菜单选择退出,则默认不在观看场地,直接欢送~
//选择所要观看的表演
switch(input) {
case 1:bear.act();
input=test.nextDisplay();//调用副菜单确认是否继续观看,否则nextDisplay的返回值为0,并将0赋值给input结束循环
break;
case 2:lion.act();
input=test.nextDisplay();//调用副菜单确认是否继续观看,否则nextDisplay的返回值为0,并将0赋值给input结束循环
break;
case 3:monkey.act();
input=test.nextDisplay();//调用副菜单确认是否继续观看,否则nextDisplay的返回值为0,并将0赋值给input结束循环
break;
case 4:parrot.act();
input=test.nextDisplay();//调用副菜单确认是否继续观看,否则nextDisplay的返回值为0,并将0赋值给input结束循环
break;
case 5:person.act();
input=test.nextDisplay(); //调用副菜单确认是否继续观看,否则nextDisplay的返回值为0,并将0赋值给input结束循环
break;
}
}
System.out.println("请有序离场,不要跑动,以免惊扰动物的表演!"); //观看完毕或者中途退出,这默认在表演现场,请有序撤离!
}
}1回答
同学你好
1、
当在“是否继续观看”的选择中,选择不是0或者1的选项时,应该给出提示并且重新输入。
a.将while循环条件改为true。
b.添加nextinput的判断,当为0或1时使用break跳出循环。
c.当不为0或1时,给出提示,结束此次循环,继续执行下次循环。
修改代码如图所示:

2、
switch-case结构中需要添加default分支判断,当输入数据是0-5之外的数字时,添加提示。
修改代码如图所示:

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
相似问题