头歌 实验三 Java面向对象编程

第一题:编写一个计算各种形状的面积和周长的程序

任务描述

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

要求

父类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){
        this.r = r;
    }

    public double getArea(){
        return Math.PI*r*r;
        //return 3.14159*r*r;
    }

    public double getL(){
        return 2*r*Math.PI;
    }
}

Triangle.java

package step1;
//在这完成Triangle类的编写
public class Triangle extends Shape2D{

    private double a;
    private double b;
    private double c;

    public Triangle(double a,double b,double c){
        this.a=a;
        this.b=b;
        this.c=c;
    }

    public double getArea(){
        if(a+b>c && a+c>b && b+c>a){
            double p=(a+b+c)/2.0;
            return Math.sqrt(p*(p-a)*(p-b)*(p-c));
        }else{
            return -1;
        }
    }

    public double getL(){
        if(a+b>c && a+c>b && b+c>a){
            return a+b+c;
        }else{
            return -1;
        }
    }
}

Rectangle.java

package step1;
//在这完成Rectangle类的编写
public class Rectangle extends Shape2D{

    public static double a;
    public static double b;

    public Rectangle(double a,double b){
        this.a=a;
        this.b=b;
    }

    public double getArea(){
        return a*b;
    }

    public double getL(){
        return (a+b)*2;
    }

}

Square.java

package step1;
//在这完成Square类的编写
public class Square extends Rectangle{
    
    private double a;

    public Square(double a){
        super(a,b);
        this.a=a;
    }
    

    public double getArea(){
        return a*a;
    }

    public double getL(){
        return 4*a;
    }

}

第二题 (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.Arrays;
 
class Class {
    private String name;
    private int num;
    private Student[] students;
    private int cont=0;
    public Class(int num,String name) {
        this.name = name;
        this.num = num;
        this.students = new Student[num];
    }
    public void addStudent (Object  student){
            this.students[cont] = (Student)student;
            cont++;
    
    }
    public int GetStudentNum(){
        return num;
    }
    public Object GetStudent(int index){
        return students[index];
    }
 
    public String toString() {
        return "Class{" +"name='" + name + '\'' +", num=" + num +", students=" + Arrays.toString(students) +'}';       
    }
}

Student.java

package step2;
//在这儿些Student类
import java.util.Arrays;

class Student {
    private int id;
    private String name;
    private int nCourse;
    private Course[] courses;
    private int cont;
    public Student(int id, String name, int nCourse) {
        this.id = id;
        this.name = name;
        this.nCourse = nCourse;
        this.courses = new Course[nCourse];
    }
    //添加
    public void addCourse(Object course){
        if(course instanceof Course){
            this.courses[cont] = (Course)course;
            cont++;
        }else {
            return;
        }
    }
    public int GetCourseNum(){
        return nCourse;
    }
    public Object GetCourse(int index){
        return courses[index];
    }
    public int calculateAvgGrade(){
        int sum=0;
        int contCourse=0;
        for (Course course:courses) {
            if(course.gethk()){
                continue;
            }else {
                sum+=course.getcj();
                contCourse++;
            }
        }
        return sum/contCourse;
    }
 
    public String toString() {
        return "Student{" + "id=" + id + ", name='" + name + '\'' + ", nCourse=" + nCourse + ", courses=" + Arrays.toString(courses) + "}";                        
    }
}

Course.java

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

在编程中,创建一个新的项目并初始化相关的文件结构是很常见的步骤。为了满足您的需求,我们可以设计一个类来处理这两个场景:长方形和圆形,每个形状都有计算周长和面积的方法。由于您提到要使用重载函数 `area` 来处理不同类型的计算,我们需要为这个方法定义不同的版本。 首先,为长方形和圆形分别定义一个基类,比如 `Shape`,然后让它们都继承自 `Shape` 并实现 `area` 和 `perimeter` 方法: ```java // 基类 Shape public abstract class Shape { protected double dimension; public Shape(double dim) { this.dimension = dim; } // 通用的周长方法 public double perimeter() { return 2 * getDimension(); } // 抽象的面积方法,需要子类实现 public abstract double area(); // 重载方法,接受不同参数长度计算不同形状 public double area(double otherDim) { if (otherDim != 0) { return this.dimension * otherDim; } else { throw new IllegalArgumentException("Invalid dimension"); } } // 简化获取维度的方法 private double getDimension() { return dimension; } } // 子类 Rectangle (长方形) public class Rectangle extends Shape { public Rectangle(double length, double width) { super(length); // 子类可以假设宽度已知 dimension = width; } @Override public double area() { return perimeter() / 2; // 长方形面积公式 } } // 子类 Circle (圆形) public class Circle extends Shape { public Circle(double radius) { super(radius); } @Override public double area() { return Math.PI * Math.pow(getDimension(), 2); // 圆形面积公式 } @Override public double perimeter() { return 2 * Math.PI * getDimension(); // 圆形周长公式 } } ``` 现在你可以根据传入的不同参数实例化相应的形状类,并通过 `area` 和 `perimeter` 方法来进行计算。例如: ```java public static void main(String[] args) { Shape rectangle = new Rectangle(5, 4); System.out.println("Rectangle: Perimeter = " + rectangle.perimeter()); System.out.println("Rectangle: Area = " + rectangle.area()); Shape circle = new Circle(3); System.out.println("Circle: Perimeter = " + circle.perimeter()); System.out.println("Circle: Area = " + circle.area()); // 输入两个参数计算长方形的面积 System.out.println("Rectangle with two dimensions: Area = " + rectangle.area(6)); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值