前言

  • 时间:2020.5.13
  • 内容:PTA练习题
  1. 7-2 jmu-Java-03面向对象基础-04-形状-继承 (30分)
  2. 7-1 图形继承与多态 (55分)
  • 备注:7-1是7-2的进阶。回学校做题问同学问题好方便呢,其实大家一开始做这些题目遇上的问题都大同小异,别人走过的弯路错路,一点拨自己就能发现了,这两篇老师说相对有点难,但期末不考,也还是认真写了呢。

7-1 计算年龄 (10分)

介绍

前面题目形状中我们看到,为了输出所有形状的周长与面积,需要建立多个数组进行多次循环。这次试验使用继承与多态来改进我们的设计。

本题描述

  1. 定义抽象类Shape
    属性:不可变静态常量double PI,值为3.14,
    抽象方法:public double getPerimeter(),public double getArea()
  2. Rectangle与Circle类均继承自Shape类。
    Rectangle类(属性:int width,length)、Circle类(属性:int radius)。
    带参构造函数为Rectangle(int width,int length),Circle(int radius)。
    toString方法(Eclipse自动生成)
  3. 编写double sumAllArea方法计算并返回传入的形状数组中所有对象的面积和与
    double sumAllPerimeter方法计算并返回传入的形状数组中所有对象的周长和。
  4. main方法
    4.1 输入整型值n,然后建立n个不同的形状。如果输入rect,则依次输入宽、长。如果输入cir,则输入半径。
    4.2 然后输出所有的形状的周长之和,面积之和。并将所有的形状信息以样例的格式输出。 提示:使用Arrays.toString。
    4.3 最后输出每个形状的类型与父类型.使用类似shape.getClass() //获得类型, shape.getClass().getSuperclass() //获得父类型;
    注意:处理输入的时候使用混合使用nextInt与nextLine需注意行尾回车换行问题。

思考

  1. 你觉得sumAllArea和sumAllPerimeter方法放在哪个类中更合适?
  2. 是否应该声明为static?

输入样例

4
rect
3 1
rect
1 5
cir
1
cir
2

输出样例

38.84
23.700000000000003
[Rectangle [width=3, length=1], Rectangle [width=1, length=5], Circle [radius=1], Circle [radius=2]]
class Rectangle,class Shape
class Rectangle,class Shape
class Circle,class Shape
class Circle,class Shape

代码

import java.util.Scanner;
import java.util.Arrays;
public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();Shape[] shape = new Shape[n];double sumPeri = 0;double sumArea = 0;for (int i = 0; i < n; i++) {String name = scan.next();if(name.equals("rect")){int width = scan.nextInt();int lenth = scan.nextInt();shape[i] = new Rectangle(width,lenth);}else if(name.equals("cir")){int r = scan.nextInt();shape[i] = new Circle(r);}sumPeri += shape[i].getPerimeter();sumArea += shape[i].getArea();}System.out.println(sumPeri + "\n" + sumArea);System.out.println(Arrays.toString(shape));for (int i = 0; i < n; i++) {System.out.println(shape[i].getClass() + "," + shape[i].getClass().getSuperclass());}}
}
abstract class Shape {final double PI = 3.14;public abstract double getPerimeter();public abstract double getArea();
}
class Rectangle extends Shape{int width;int length;Rectangle(int width,int length){this.width = width;this.length = length;}@Overridepublic String toString() {return "Rectangle [" +"width=" + width +", length=" + length +']';}@Overridepublic double getPerimeter() {return 2 * (width + length);}@Overridepublic double getArea() {return width * length;}
}
class Circle extends Shape{int radius;Circle(int radius){this.radius = radius;}@Overridepublic String toString() {return "Circle [" +"radius=" + radius +']';}@Overridepublic double getPerimeter() {return 2 * PI * radius;}@Overridepublic double getArea() {return PI * radius *radius;}
}

7-1 图形继承与多态 (55分)

介绍

掌握类的继承、多态性及其使用方法。具体需求参见作业指导书。 2020-OO第06次作业-1指导书V1.0.pdf

输入格式

从键盘首先输入三个整型值(例如a b c),分别代表想要创建的Circle、Rectangle及Triangle对象的数量,然后根据图形数量继续输入各对象的属性值(均为实型数),数与数之间可以用一个或多个空格或回车分隔。

输出格式

  1. 如果图形数量非法(小于0)或图形属性值非法(数值小于0以及三角形三边关系),则输出Wrong Format。
  2. 如果输入合法,则正常输出,输出内容如下(输出格式见输入输出示例):
  • 各个图形的面积;
  • 所有图形的面积总和;
  • 排序后的各个图形面积;
  • 再次所有图形的面积总和。

输入样例1

1 1 1 2.3 3.2 3.2 6.5 3.2 4.2

输出样例1

Original area:
16.62 10.24 5.68
Sum of area:32.54
Sorted area:
5.68 10.24 16.62
Sum of area:32.54

输入样例2

0 2 2 2.3 2.5 56.4 86.5 64.3 85.6 74.6544 3.2 6.1 4.5

输出样例2

Original area:
5.75 4878.60 2325.19 7.00
Sum of area:7216.54
Sorted area:
5.75 7.00 2325.19 4878.60
Sum of area:7216.54

输入样例3

0 0 1 3 3 6

输出样例3

Wrong Format

代码

import java.util.Arrays;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);boolean key = true;int a = scan.nextInt();int b = scan.nextInt();int c = scan.nextInt();if(a < 0 || b < 0 || c<0) {key = false;System.out.println("Wrong Format");} else {Shape[] shapes = new Shape[a + b + c];double[] areas = new double[a + b + c];double sumArea = 0;for (int i = 0; i < a; i++) {double cirRadius = scan.nextDouble();Circle circle = new Circle(cirRadius);if (circle.validate()) {shapes[i] = circle;areas[i] = circle.getArea();sumArea += areas[i];} else {key = false;}}for (int i = a; i < a + b; i++) {double recWidth = scan.nextDouble();double recLength = scan.nextDouble();Rectangle rectangle = new Rectangle(recWidth, recLength);if (rectangle.validate()) {shapes[i] = rectangle;areas[i] = rectangle.getArea();sumArea += areas[i];} else {key = false;}}for (int i = a + b; i < a + b + c; i++) {double triLength1 = scan.nextDouble();double triLength2 = scan.nextDouble();double triLength3 = scan.nextDouble();Triangle triangle = new Triangle(triLength1,triLength2,triLength3);if(triangle.validate()){shapes[i] = triangle;areas[i] = triangle.getArea();sumArea += areas[i];} else {key = false;}}if (!key) {System.out.println("Wrong Format");} else {//1System.out.println("Original area:");for (int i = 0; i < a+b+c; i++) {System.out.print(String.format("%.2f", areas[i]));if(i == a+b+c)break;System.out.print(" ");}System.out.println();//2System.out.println("Sum of area:" + String.format("%.2f",sumArea));//3System.out.println("Sorted area:");Arrays.sort(areas);for (int i = 0; i < a+b+c; i++) {System.out.print(String.format("%.2f", areas[i]));if(i == a+b+c)break;System.out.print(" ");}System.out.println();//4System.out.println("Sum of area:" + String.format("%.2f",sumArea));}}}
}
abstract class Shape {public abstract double getArea();public abstract boolean validate();public abstract String toString();
}
class Circle extends Shape{double radius;Circle(double radius){this.radius = radius;}@Overridepublic double getArea() {return Math.PI * radius * radius;}@Overridepublic boolean validate() {if(radius > 0) {return true;}return false;}@Overridepublic String toString() {return null;}
}
class Rectangle extends Shape {double width;double length;Rectangle(double width,double length){this.width = width;this.length = length;}@Overridepublic double getArea() {return width * length;}@Overridepublic boolean validate() {if(width > 0 && length >0) {return true;}return false;}@Overridepublic String toString() {return null;}
}
class Triangle extends Shape {double side1;double side2;double side3;Triangle(double side1,double side2,double side3){this.side1 = side1;this.side2 = side2;this.side3 = side3;}@Overridepublic double getArea() {//(海伦公式)(p=(a+b+c)/2)//S=sqrt[p(p-a)(p-b)(p-c)]//=sqrt[(1/16)(a+b+c)(a+b-c)(a+c-b)(b+c-a)]//=1/4sqrt[(a+b+c)(a+b-c)(a+c-b)(b+c-a)]double p = (side1 + side2 + side3) / 2;return Math.sqrt(p * (p - side1) * (p - side2) * (p - side3));}@Overridepublic boolean validate() {if(side1 > 0 && side2 >0 && side3 >0 && (side1 + side2) > side3 && (side1 + side3) > side2 && (side2 + side3) > side1 && Math.abs(side1 - side2) < side3 && Math.abs(side1 - side2) < side3 && Math.abs(side2 - side3) < side1) {return true;}return false;}@Overridepublic String toString() {return null;}
}

PTA -- 题附代码(形状继承) (图形继承与多态)相关推荐

  1. 2021-11-09 C++封装继承多态---继承语法、多态语法、文件操作(附代码理解)

    6 继承 6.1继承的基本语法 例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同,接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义 ...

  2. 笔记整理3----Java语言高级(三)11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包修饰符

    11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包&修饰符 第11天 综合练习 今日内容介绍 综合练习 ...

  3. 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法

    设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类.长方形类.正方形类.三角形类来继承图形类,并实现上述两个方法 设计抽象类 就要使用abstract关键字,抽象类中的 ...

  4. C++_代码重用3-私有继承

    使用包含:易于理解,类声明中包含表示被包含类的显式命名对象,代码可以通过名称引用这些对象: 使用继承:将使关系更抽象,且继承会引起很多问题,尤其是从多个基类继承时. 私有继承所提供的特性确实比包含多. ...

  5. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  6. java 中组合与复用_Java 代码复用(组合与继承)

    java中的类都是围绕着类进行的.可以通过创建新类来复用代码,而不必从头编写.可以使用别人已经开发并调试好的类.此方法使用的窍门在于使用类而不破坏现有的程序代码.达到这一目的的方法有两种: 第一种方法 ...

  7. Java常见面试知识点:继承、接口、多态、代码块

    问题:Java常见面试知识点:继承.接口.多态.代码块 答案: 1.继承 继承中构造方法的访问特点 子类中所有的构造方法默认都会访问父类中无参的构造方法 为什么? • 子类在初始化的时候,有可能会使用 ...

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

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

  9. 2020华为杯E题——基于灰色预测的大雾能见度预测模型(附代码)

    2020华为杯E题--基于灰色预测的大雾能见度预测模型(附代码) 一.E题赛题 二.赛题分析 三.基于灰色预测的大雾能见度预测模型 3.1灰色预测模型的定义 3.2 灰色预测模型的目的 GM(1,1) ...

最新文章

  1. HDU1756(判断点在多边形内外)
  2. mybatis-启动源码分析
  3. 用Jenkins自动化搭建测试环境_入门试炼05
  4. 作者:高翔(1984-),男,国防大学信息作战与指挥训练教研部博士后,主要研究方向为体系分析与超网建模。...
  5. JMeter集合点功能的使用
  6. 【转】测试用例编写(功能测试框架)
  7. c ++中字符串长度的_C ++中的字符串长度
  8. 拓端tecdat|R语言复杂网络分析:聚类(社区检测)和可视化
  9. Linux SHELL 命令入门题目(一)
  10. 陕西省单招计算机应用考什么,陕西省对口单招计算机应用基础模拟试题四
  11. Kohana - PHP5框架 - 我看过的开源框架
  12. 阿里云营收结构和基础设施规模
  13. Retina屏而被图处理
  14. grafana 画拓扑图 能不能_画网络拓扑图的软件除了visio外还有什么软件啊?
  15. Crime and Punishment
  16. ESXI系统安装教程
  17. 《统计学基于R》第一章 数据与R
  18. 个人开发者与企业开发者的区别
  19. 计算机类SCI与EI收录的外文期刊
  20. 因子分析法(Factor Analysis Method) 【转】

热门文章

  1. UVA10110-灯光
  2. Masterboxan INC智能化资产配置模式上线,全方位提升数字化金融服务
  3. 带你7天玩转可视化建站平台
  4. 2012年下半年软件评测师上午试题
  5. JQuery极果商城项目实战(附完整代码)
  6. 服务器被植入广告文件,[求助]服务器后台被植入webshell,看不懂什么意思
  7. OPM泄漏事故报告:矛头直指领导对数据丢失无作为
  8. 阿里云ECS共享型n4服务器1核2G配置性能评测
  9. 手机怎么访问kodi_教你苹果手机(iPhone)上怎么装KODI (不用越狱)
  10. PyTorch Mobile在端侧可堪大用?能否与TensorFlow Lite一较高下