头歌实验平台Java实验三

实验三 (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;
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只菜鸟呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值