7-37 图形卡片排序游戏 (40 分)
掌握类的继承、多态性使用方法以及接口的应用。
输入格式:
首先,在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如: 1 3 4 2 1 3 4 2 1 3 0
然后根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。
输出格式:
如果图形数量非法(小于0)或图形属性值非法(数值小于0以及三角形三边不能组成三角形),则输出Wrong Format。
如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容如下:
排序前的各图形类型及面积,格式为图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n ,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格;
排序后的各图形类型及面积,格式同排序前的输出;
所有图形的面积总和,格式为Sum of area:总面积值。
输入样例1:
在这里给出一组输入。例如:
1 5 3 2 0
输出样例1:
在这里给出相应的输出。例如:
Wrong Format
输入样例2:
在这里给出一组输入。例如:
4 2 1 3 0
3.2 2.5 0.4 2.3 1.4 5.6 2.3 4.2 3.5
输出样例2:
在这里给出相应的输出。例如:
The original list:
Trapezoid:1.14 Rectangle:3.22 Circle:98.52 Triangle:4.02
The sorted list:
Circle:98.52 Triangle:4.02 Rectangle:3.22 Trapezoid:1.14
Sum of area:106.91
输入样例3:
在这里给出一组输入。例如:
4 2 1 3 0
3.2 2.5 0.4 2.3 1.4 5.6 2.3 4.2 8.4
输出样例3:
在这里给出相应的输出。例如:
Wrong Format
import java.util.ArrayList;
import java.util.Scanner;
import java.util.TreeSet;public class Main {//在Main类中定义一个静态Scanner对象,这样在其它类中如果想要使用该对象进行输入,则直接
//使用Main.input.next…即可(避免采坑)public static Scanner input = new Scanner(System.in);public static void main(String[] args){ArrayList<Integer> list = new ArrayList<Integer>();int num = input.nextInt();while(num != 0){if(num < 0 || num > 4){System.out.println("Wrong Format");System.exit(0);}list.add(num);num = input.nextInt();}DealCardList dealCardList = new DealCardList(list);if(!dealCardList.validate()){System.out.println("Wrong Format");System.exit(0);}dealCardList.showResult();input.close();}
}class DealCardList{ArrayList<Card> cardList=new ArrayList<>();public DealCardList() {}public DealCardList(ArrayList<Integer> card) {for (Integer integer : card) {if (integer==0)break;switch (integer){case 1:Card card1=new Card(new Circle(Main.input.nextDouble()));card1.getShape().setShapeName("Circle");cardList.add(card1);break;case 2:Card card2=new Card(new Rectangle(Main.input.nextDouble(),Main.input.nextDouble()));card2.getShape().setShapeName("Rectangle");cardList.add(card2);break;case 3:Card card3=new Card(new Triangle(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble()));card3.getShape().setShapeName("Triangle");cardList.add(card3);break;case 4:Card card4=new Card(new Trapezoid(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble()));card4.getShape().setShapeName("Trapezoid");cardList.add(card4);break;}}}public boolean validate(){boolean ret=true;for (Card card : cardList) {if (!card.getShape().validate()){ret=false;break;}}return ret;}public void cardSort(){TreeSet<Card> cards = new TreeSet<>(cardList);for (Card card : cards) {System.out.print(card.getShape());}}public double getAllArea(){double sum=0;for (Card card : cardList) {sum+=card.getShape().getArea();}return sum;}public void showResult(){System.out.println("The original list:");for (Card card : cardList) {System.out.print(card.getShape());}System.out.println();System.out.println("The sorted list:");cardSort();System.out.println();System.out.printf("Sum of area:%.2f\n",getAllArea());}
}
class Card implements Comparable<Card>{private Shape shape;public Card() {}public Card(Shape shape) {this.shape = shape;}public Shape getShape() {return shape;}public void setShape(Shape shape) {this.shape = shape;}@Overridepublic int compareTo(Card card) {return -(int)(shape.getArea()-card.getShape().getArea());}
}abstract class Shape{private String shapeName;public Shape() {}public Shape(String shapeName) {this.shapeName = shapeName;}public String getShapeName() {return shapeName;}public void setShapeName(String shapeName) {this.shapeName = shapeName;}public abstract double getArea();public abstract boolean validate();/*** 重写了toString的方法* 利用Shape类的shapeName变量来表示相应的图形,* 而不是用getclass方法得到类名* @return*/@Overridepublic String toString() {return getShapeName()+":"+String.format("%.2f ",getArea());}
}class Circle extends Shape{private double radius;public Circle() {}public Circle(double radius) {this.radius = radius;}public double getRadius() {return radius;}public void setRadius(double radius) {this.radius = radius;}@Overridepublic double getArea() {return Math.PI*radius*radius;}@Overridepublic boolean validate() {return this.radius>0;}
}class Rectangle extends Shape{private double width,height;public Rectangle() {}public Rectangle(double width, double height) {this.width = width;this.height = height;}public double getWidth() {return width;}public void setWidth(double width) {this.width = width;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}@Overridepublic double getArea() {return height*width;}@Overridepublic boolean validate() {return width>0&&height>0;}
}class Triangle extends Shape{private double side1,side2,side3;public Triangle() {}public Triangle(double side1, double side2, double side3) {this.side1 = side1;this.side2 = side2;this.side3 = side3;}@Overridepublic double getArea() {double p=(side1+side2+side3)/2;return Math.sqrt(p*(p-side1)*(p-side2)*(p-side3));}@Overridepublic boolean validate() {boolean ret=true;if (!(side1>0&&side3>0&&side2>0))ret=false;else{if (!(side1+side2>side3&&side1+side3>side2&&side2+side3>side1))ret=false;}return ret;}
}class Trapezoid extends Shape{private double topSide,bottomSide,height;public Trapezoid() {}public Trapezoid(double topSide, double bottomSide, double height) {this.topSide = topSide;this.bottomSide = bottomSide;this.height = height;}@Overridepublic double getArea() {return (topSide+bottomSide)*height/2;}@Overridepublic boolean validate() {return topSide>0&&height>0&&bottomSide>0;}
}
7-37 图形卡片排序游戏 (40 分)相关推荐
- 7-1 图形卡片排序游戏 (40 分)
** 7-1 图形卡片排序游戏 (40 分) ** 掌握类的继承.多态性使用方法以及接口的应用.详见[作业指导书2020-OO第07次作业-1指导书V1.0.pdf 输入格式: 首先,在一行上输入一串 ...
- 7-2 图形卡片分组游戏 (60 分)
** 7-2 图形卡片分组游戏 (60 分) ** 掌握类的继承.多态性使用方法以及接口的应用. 具体需求参考作业指导书2021-OO第07次作业-2指导书V1.0.pdf 输入格式: 在一行上输入一 ...
- HTML5 Canvas核心技术:图形.动画与游戏开发
<HTML5 Canvas核心技术:图形.动画与游戏开发> 基本信息 原书名:Core HTML5 Canvas: Graphics, Animation, and Game Develo ...
- 网络教育计算机统考40分单选,2021年6月网络教育统考《计算机应用基础》统考必过题库最全试题及答案...
<2021年6月网络教育统考<计算机应用基础>统考必过题库最全试题及答案>由会员分享,可在线阅读,更多相关<2021年6月网络教育统考<计算机应用基础>统考必 ...
- 7-5 图形继承与多态 (50 分)
** 7-5 图形继承与多态 (50 分) ** 掌握类的继承.多态性及其使用方法.具体需求参见作业指导书. 2021-OO第06次作业-5指导书V1.0.pdf 解题报告 1.深入理解继承与多态的原 ...
- 7-13 大家一起来玩游戏 (20 分)
7-13 大家一起来玩游戏 (20 分) 24点是一种益智游戏,24点是把4个整数(一般是正整数)通过加减乘除以及括号运算,使最后的计算结果是24的一个数学游戏,24点可以考验人的智力和数学敏感性,它 ...
- Day10:图形用户界面和游戏开发
文章目录 图形用户界面和游戏开发 基于tkinter模块的GUI 使用Pygame进行游戏开发 制作游戏窗口 在窗口中绘图 加载图像 实现动画效果 碰撞检测 事件处理 图形用户界面和游戏开发 基于tk ...
- Python开发系列课程(12) - 图形用户界面和游戏开发
图形用户界面和游戏开发 基于tkinter模块的GUI GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述.Python默认的GUI开发模块是tkint ...
- 小学《教育教学知识与能力》教学设计万能模板 稳拿40分
在小学教育教学知识与能力的考试中,教学设计会考一个题目,占40分.可以看看以往真题是怎么出教学设计题的.点击链接加入群聊[教师资格证学习群]:https://jq.qq.com/?_wv=1027&a ...
最新文章
- Windows Service 2008 R2 远程桌面关闭,自动注销的解决方法
- 直线一级倒立摆控制(自起摆和稳态控制)
- java屏蔽关键字_替换禁用语(指定关键字)的过滤器
- 学习笔记整理之模式化方法
- LeetCode 1855. 下标对中的最大距离(双指针)
- C++的三种封装层级
- manacher算法学习(求最长回文子串长度)
- 我的联想拯救者y7000p怎么安装双系统Linux ubuntu 18.04呢?
- Centos 7安装Zabbix6.0
- Java Blend_Expression Blend的替代品[关闭]
- html特殊符号怎么输入法,特殊符号怎么打出来?电脑特殊符号输入方法
- 黑莓bold模拟器无法上网问题之解决
- 2021南昌市地区高考成绩排名查询,2021南昌中小学国编成绩排名/分数线
- jntoo.php,admin/website.php · 曹琪/shufadasai-englishi - Gitee.com
- ppt中如何插入页码(如何从第二页插入页码?)
- 配置高可用(名称节点高可用)
- LTspice基础教程-001.软件简介与安装
- Open Inventor 10.11.1 Crack
- LeetCode 871. Minimum Number of Refueling Stops 最少加油次数
- About Flash
热门文章
- s5p4418 android 驱动 hal 应用之led 串口 rs485 can总线应用(app 有源码)
- 26 | 案例篇:如何找出狂打日志的“内鬼”?
- 41 | 案例篇:如何优化 NAT 性能?(上)
- trados怎么导出html,【转】Trados 基本知识、使用技巧与经验
- 多个网页用一个html,在多个页面使用同一个HTML片段的代码-javascript技巧
- python归一化处理_详解python实现数据归一化处理的方式:(0,1)标准化
- delphi报列表索引越界怎么处理_Python入门第3课:列表元组,看这一篇够了 | 原创...
- 【下载】《看见新力量》第二期,带你走进数十位科技创业者背后的故事
- MySQL 8.0 Server层最新架构详解
- 唯品会在 Flink 容器化与平台化上的建设实践