实验三 (Java)面向对象编程

关卡1 编写一个计算各种形状的面积和周长的程序

任务描述
本关任务:编写一个计算各种形状的面积和周长的程序。

要求
父类Shape2D为一个抽象类,其中包含计算周长和计算面积两个抽象方法。其他形状圆(Circle),三角形(Triangle)和长方形(Rectangle)类均继承自Shape2D类。而正方形Square类继承自Rectangle类。编写计算这些形状的面积和周长的各类的程序。

abstract public double getArea();//计算面积的方法
abstract public double getL();//计算周长的方法
如果三角形的边不满足要求,这两方法都返回-1
PI=3.14159
各类的构造函数如下:
public Circle(double r);r为圆的半径
public Triangle(double a,double b,double c);a,b,c为三边的长
public Rectangle(double a,double b);a,b为长宽
public Square(double a);a为边长
提示:
不同的形状包含的属性应该不同,构造函数应该不同,计算周长和面积的方法也应该不同。

Shape2D.java

package step1;
public abstract class Shape2D{//在这完成Shape2D类的程序的编写
abstract public double  getArea();
abstract public double getL();}

Circle.java

package step1;
//在这完成Circle类的编写
public class Circle extends Shape2D
{private double r;public Circle(double r){super();this.r = r;}public double getL(){return 2*Math.PI*r;}public double getArea(){return Math.pow(r,2)*Math.PI;}
}

Triangle.java

package step1;
//在这完成Triangle类的编写
public class Triangle extends Shape2D
{private double a,b,c;public Triangle(double a,double b,double c){this.a = a;this.b = b;this.c = c;}public double getL(){return a+b>c && a+c > b && b+c>a ?a+b+c:-1;}public double getArea(){double p = (a+b+c)/2.0;return a+b>c && a+c > b && b+c>a ? Math.sqrt(p*(p-a)*(p-b)*(p-c)) :-1;}
}

Rectangle.java

package step1;
//在这完成Rectangle类的编写
public class Rectangle extends Shape2D
{public double a,b;public Rectangle(double a,double b){this.a = a;this.b = b;}public double getL(){return 2*(a+b);}public double getArea(){return a*b;}
}

Square.java

package step1;
//在这完成Square类的编写
public class Square extends Rectangle
{public Square(double a){super(a,a);}}

第2关:(Java)类

任务描述
本关任务:设计并实现三个类:班级(Class)、学生(Student)、课程(Course)。然后计算班上每个同学的平均成绩。

要求:
班级类的私有属性包含班级名称、学生人数以及学生列表(用对象数组表示)。班级类的方法包括:

  • 构造函数Class(int num,String name) //num学生人数,name班级名称
  • void addStudent (Object student) //往班级中添加学生。Student学生对象
  • int GetStudentNum() //返回班级人数
  • Object GetStudent(int index) //返回对应下标的学生对象
  • 重写toString()方法来将班级有关信息转换成字符串.

学生类的私有属性包含学生的学号、姓名、所选课程数量、所选课程(用对象数组表示)。学生类的方法包括:

  • 构造函数Student(int id, String name, int nCourse) //id学号,name学生姓名,nCourse所学课程数

  • void addCourse(Object course) 往学生类中添加课程对象

  • int GetCourseNum() 返回所学课程数

  • Object GetCourse(int index) 返回对应下标的课程对象

  • int calculateAvgGrade() 计算该每个学生的平均成绩(取整)

  • 重写toString()方法来将学生有关信息转换成字符串。

    课程类包含私有属性课程编号、课程名称、学分、是否缓考以及成绩(成绩要求在0到100分之间)。课程类方法包括:

  • 构造函数public Course(int id,String name,int credit) 分别为课程编号、课程名称、学分

  • void sethk(boolean hk) hk=true代表缓考

  • boolean gethk() 返回是否学生缓考

  • void setcj(int cj) 设置成绩

  • int getcj() 返回成绩

  • int getCredit() 返回该课程的学分

  • 重写toString()方法来将课程有关信息转换成字符串。

    编写一个测试类来测试这三个类的使用。往班级中创建多个学生,学生可以选修多门课程。计算班级中每个同学的平均成绩。
    注意:如果某生某课程缓考,则该门课成绩不能计入平均成绩内。此外,类中不可出现公用属性,必须使用封装。

Class.java

package step2;
//在这些Class类
import java.util.*;
public class Class
{private String name=null;private int num = 0;private Student[] stuList;private int i = 0;public Class(int num,String name){this.num = num;this.name = name;this.stuList = new Student[num];}public void addStudent(Object student){this.stuList[i] = (Student)student;i++;}public int GetStudentNum(){return num;}public Object GetStudent(int index){return stuList[index];}public String toString(){return "Class{" +"name='" + name + '\'' +", num=" + num +", students=" + Arrays.toString(stuList) +'}';}
}

Student.java

package step2;
//在这儿些Student类
import java.util.*;
public class Student
{private int id;private String name;private int nCourse;private Course[] courseList;private int i = 0;public Student(int id,String name,int nCourse){this.id = id;this.name = name;this.nCourse = nCourse;this.courseList = new Course[nCourse];}public void addCourse(Object course){if(course instanceof Course){courseList[i] = (Course)course;i++;}else{return;}}public int GetCourseNum(){return nCourse;}public Object GetCourse(int index){return courseList[index];}public int calculateAvgGrade(){double sum_cj = 0;int cont = 0;for(Course k:courseList){if(k.gethk())continue;else{sum_cj  += k.getcj();cont++;}}return (int)(sum_cj/cont);}public String toString(){return "Student{" +"id=" + id +", name='" + name + '\'' +", nCourse=" + nCourse +", courses=" + Arrays.toString(courseList) +'}';}
}

Course.java


package step2;
//在这些Course类
import java.util.*;
public class Course
{private int id;private String name;private int credit;private boolean hk = false;private int cj;public Course(int id,String name,int credit){this.id = id;this.name = name;this.credit = credit;}public void sethk(boolean hk){this.hk = hk;}public boolean gethk(){return hk;}public void setcj(int cj){this.cj = cj;}public int getcj(){return cj;}public int getCredit(){return credit;}public String toString(){return "id = " + id + "name= " + name;}
}

头歌实验平台Java实验三相关推荐

  1. java泛型实验报告,java实验报告异常集合类和泛型

    java实验报告异常集合类和泛型 成绩: 面向对象原理与 Java 实践课程实验报告实验 3:异常.集合类和泛型姓 名 _ ___ 班 级 _ ___ 学 号 _ ___ 实验地点 _ ___ 实验时 ...

  2. java自定义异常实验总结,Java实验--自定义异常的使用

    这几天有点小忙,都没时间更新博客了,今天趁着Java实验课,把做的这次实验放上去吧! 实验5 自定义异常的使用 a.在定义一个银行类Bank时, 有存钱deposit().取钱withdraw().显 ...

  3. 头歌 C++ 面向对象程序设计 实验四 公有继承 —— 学生信息类

    设计一个学生信息类 一.任务描述 本关任务:声明并定义一个学生信息类. 二.相关知识 为了完成本关任务,你需要掌握类的声明和定义. 类 在现实世界中,经常有属于同一类的对象.例如,你的自行车只是世界上 ...

  4. 无人机实验平台(七) 实验平台的坐标转换(上)

    为什么要做坐标转换? 大疆提供的sdk中指出,无人机通常情况下通过两个坐标系来控制方向:自身坐标系(Body)和地面坐标系(N-E-D).这两个坐标系可以相互转换,这种转换可以在无人机内部完成,我们只 ...

  5. 四、分支结构(头歌实践平台)

    第1关:Java分支结构之 if-else 任务描述 本小节需要你完成一个判断学员成绩等级的小程序,效果如下: 相关知识 生活中,我们经常需要先做判断,然后才决定是否要做某件事情.例如,如果考试成绩大 ...

  6. 头歌实践平台(python数据结构)(1-6)

    第1关:栈抽象数据类型及其实现 任务描述 相关知识 栈抽象数据类型 List 的操作方法 编程要求 测试说明 任务描述 本关任务:编写代码实现栈的基本操作. 相关知识 为了完成本关任务,你需要掌握: ...

  7. 头歌实训——Java面向对象--封装、继承和多态

    第1关:什么是封装,如何使用封装 package case1;public class TestPersonDemo {public static void main(String[] args) { ...

  8. 头歌C++面向对象实训三

    C++ 面向对象 - 构造函数与析构函数 一.实训目的 1.理解构造函数和析构函数 2.熟悉掌握构造函数和析构函数的运用 3.掌握对象数组的运用 4.理解静态成员及函数 二.实训内容 1.构造函数 - ...

  9. 【勇敢牛牛,不怕困难】有手就行栏目:头歌教学平台 - 湖南工业大学刘强老师的C语言函数实战课堂作业答案 - > - > {求和+回文数计算+编写函数求表达式的值+阶乘数列+亲密数+公约数公倍数求解}

    第一关:求和 任务描述 题目描述:给你一个n,要求你编写一个函数求1+2+-+n. 输入 输入一个n 输出 输出1+2+-+n的和 测试说明 样例输入: 100 样例输出: 5050 分析: 这个是真 ...

最新文章

  1. “CTO嫌弃我读书太少!” 假期里如何更高效的阅读?老K的3张专辑文章,读个痛快!...
  2. Android--用手指移动画面里的照片/onTouchEvent事件判断
  3. HDOJ 1082 模拟 水
  4. Jmeter分布式压测方案
  5. MySQL-DB参数、内存、I/O、安全等相关参数设置
  6. 2020年什么名字最受欢迎?前面“奕辰”你别走
  7. opencv:用最邻近插值和双线性插值法实现上采样(放大图像)与下采样(缩小图像)
  8. 使用nginx搭建流媒体直播平台(该方式不适用与多人聊天)
  9. 美团十年,支撑全球最大规模外卖配送的一站式机器学习平台是如何炼成的?...
  10. 【UE4】特效之 Particle System 详解(一)—— 综述
  11. 「Python量化基础」时间序列的自相关性与平稳性
  12. php 获取服务器端口,PHP获取当前服务器详细信息
  13. ssm毕设项目鲲龙装饰公司在线管理系统的设计与开发前台模块iub6h(java+VUE+Mybatis+Maven+Mysql+sprnig)
  14. 对于解决新版unity5.x的license error 问题
  15. 网易微博宣布将用户迁移至轻博客Lofter
  16. WEB前端大作业-速拍摄影服务响应式网页模板(HTML JS CSS))
  17. 香港云服务器哪家便宜好用?
  18. 数据库设计之备用字段
  19. 基于Yocto的qmake编译环境默认QMAKE_SPEC不是linux-oe-g++的问题
  20. LuckyFrame使用手册

热门文章

  1. 做奥运志愿者其实很光荣的
  2. RPC — 微服务之gRPC框架技术解析
  3. JSON中的JSON.parseArray()方法
  4. 苹果cms第三方登录QQ互联正确回调设置方法
  5. java中读取excel数据类型_在Java中读取Excel文件的内容
  6. 【virmach的服务器突然连不上ssh解决方法】
  7. 服务器证书 sll证书的理解
  8. 人工神经网络算法模型简介
  9. javascript性能优化-repaint和reflow
  10. 用腾讯轻联,打通草料二维码与其他应用的连接