关于继续观看表演的判断问题?

来源: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回答

吃吃吃鱼的猫

2019-06-12

同学你好

1、

当在“是否继续观看”的选择中,选择不是0或者1的选项时,应该给出提示并且重新输入。

a.将while循环条件改为true。

b.添加nextinput的判断,当为0或1时使用break跳出循环。

c.当不为0或1时,给出提示,结束此次循环,继续执行下次循环。

修改代码如图所示:

http://img.mukewang.com/climg/5d00938f0001774405630521.jpg

2、

switch-case结构中需要添加default分支判断,当输入数据是0-5之外的数字时,添加提示。

修改代码如图所示:

http://img.mukewang.com/climg/5d0095410001ddb308670364.jpg

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

0

0 学习 · 11489 问题

查看课程