掌握类的继承、多态性使用方法以及接口的应用。

输入格式:
首先,在一行上输入一串数字(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 分)相关推荐

  1. 7-1 图形卡片排序游戏 (40 分)

    ** 7-1 图形卡片排序游戏 (40 分) ** 掌握类的继承.多态性使用方法以及接口的应用.详见[作业指导书2020-OO第07次作业-1指导书V1.0.pdf 输入格式: 首先,在一行上输入一串 ...

  2. 7-2 图形卡片分组游戏 (60 分)

    ** 7-2 图形卡片分组游戏 (60 分) ** 掌握类的继承.多态性使用方法以及接口的应用. 具体需求参考作业指导书2021-OO第07次作业-2指导书V1.0.pdf 输入格式: 在一行上输入一 ...

  3. HTML5 Canvas核心技术:图形.动画与游戏开发

    <HTML5 Canvas核心技术:图形.动画与游戏开发> 基本信息 原书名:Core HTML5 Canvas: Graphics, Animation, and Game Develo ...

  4. 网络教育计算机统考40分单选,2021年6月网络教育统考《计算机应用基础》统考必过题库最全试题及答案...

    <2021年6月网络教育统考<计算机应用基础>统考必过题库最全试题及答案>由会员分享,可在线阅读,更多相关<2021年6月网络教育统考<计算机应用基础>统考必 ...

  5. 7-5 图形继承与多态 (50 分)

    ** 7-5 图形继承与多态 (50 分) ** 掌握类的继承.多态性及其使用方法.具体需求参见作业指导书. 2021-OO第06次作业-5指导书V1.0.pdf 解题报告 1.深入理解继承与多态的原 ...

  6. 7-13 大家一起来玩游戏 (20 分)

    7-13 大家一起来玩游戏 (20 分) 24点是一种益智游戏,24点是把4个整数(一般是正整数)通过加减乘除以及括号运算,使最后的计算结果是24的一个数学游戏,24点可以考验人的智力和数学敏感性,它 ...

  7. Day10:图形用户界面和游戏开发

    文章目录 图形用户界面和游戏开发 基于tkinter模块的GUI 使用Pygame进行游戏开发 制作游戏窗口 在窗口中绘图 加载图像 实现动画效果 碰撞检测 事件处理 图形用户界面和游戏开发 基于tk ...

  8. Python开发系列课程(12) - 图形用户界面和游戏开发

    图形用户界面和游戏开发 基于tkinter模块的GUI GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述.Python默认的GUI开发模块是tkint ...

  9. 小学《教育教学知识与能力》教学设计万能模板 稳拿40分

    在小学教育教学知识与能力的考试中,教学设计会考一个题目,占40分.可以看看以往真题是怎么出教学设计题的.点击链接加入群聊[教师资格证学习群]:https://jq.qq.com/?_wv=1027&a ...

最新文章

  1. Windows Service 2008 R2 远程桌面关闭,自动注销的解决方法
  2. 直线一级倒立摆控制(自起摆和稳态控制)
  3. java屏蔽关键字_替换禁用语(指定关键字)的过滤器
  4. 学习笔记整理之模式化方法
  5. LeetCode 1855. 下标对中的最大距离(双指针)
  6. C++的三种封装层级
  7. manacher算法学习(求最长回文子串长度)
  8. 我的联想拯救者y7000p怎么安装双系统Linux ubuntu 18.04呢?
  9. Centos 7安装Zabbix6.0
  10. Java Blend_Expression Blend的替代品[关闭]
  11. html特殊符号怎么输入法,特殊符号怎么打出来?电脑特殊符号输入方法
  12. 黑莓bold模拟器无法上网问题之解决
  13. 2021南昌市地区高考成绩排名查询,2021南昌中小学国编成绩排名/分数线
  14. jntoo.php,admin/website.php · 曹琪/shufadasai-englishi - Gitee.com
  15. ppt中如何插入页码(如何从第二页插入页码?)
  16. 配置高可用(名称节点高可用)
  17. LTspice基础教程-001.软件简介与安装
  18. Open Inventor 10.11.1 Crack
  19. LeetCode 871. Minimum Number of Refueling Stops 最少加油次数
  20. About Flash

热门文章

  1. s5p4418 android 驱动 hal 应用之led 串口 rs485 can总线应用(app 有源码)
  2. 26 | 案例篇:如何找出狂打日志的“内鬼”?
  3. 41 | 案例篇:如何优化 NAT 性能?(上)
  4. trados怎么导出html,【转】Trados 基本知识、使用技巧与经验
  5. 多个网页用一个html,在多个页面使用同一个HTML片段的代码-javascript技巧
  6. python归一化处理_详解python实现数据归一化处理的方式:(0,1)标准化
  7. delphi报列表索引越界怎么处理_Python入门第3课:列表元组,看这一篇够了 | 原创...
  8. 【下载】《看见新力量》第二期,带你走进数十位科技创业者背后的故事
  9. MySQL 8.0 Server层最新架构详解
  10. 唯品会在 Flink 容器化与平台化上的建设实践