利用java继承机制创建Figure、CloseFigure、Line、Polygon、Triangle、Rectangle类、并通过throws进行违规数据的异常处理。

发布于:2023-01-04 ⋅ 阅读:(363) ⋅ 点赞:(0)

1.实验题目:

5-13修改例3.7各图形类的构造方法如下,若参数不符合要求,抛出无效参数异常。

// 构造点,若x<0或 y<0,则抛出无效参数异常

public Point(int x, int y) throws IllegalArgumentException

//以下构造矩形,若length<0或width<0,则抛出无效参数异常

public Rectangle(Point point1, int length, int width) throws IllegalArgumentException

// 以下由三点构造一个三角形;当三点共线不能构成一个三角形时,则抛出无效参数异常

Public Triangle(Point point1, Point point2, Point point3) throws IllegalArgumentException

//以下构造多边形,由points数组指定多点;若少于3点,或不能构成多边形,则抛出无效参数异常

public Polygon(Point[] points) throws IllegalArgumentException

2.实验目的:

掌握java异常处理机制及分析代码存在的异常类型

掌握throws的用法

掌握继承的机制和用法

3.实验内容:

  1. 实验思路

创建图形类Figure、Point

创建Figure的子类CloseFigure、Line

创建CloseFigure的子类Polygon、Triangle

创建Polygon的子类Rectangle

类的继承关系如图:

 对构造点、矩形、三角形、多边形出现的参数无效异常进行处理 

2.关键代码截图 

  1. 对构造点出现的x、y<0参数异常进行处理

(2)对多边形边数小于3异常进行处理

(3)对矩形的长和宽是否都大于零判断

(4)对三个点是否能构成三角形处理,若不能抛出数据错误异常

3.运行结果

1)计算给定三点所组成的三角形的周长和面积、给定4点的四边形的周长和面积

(2)数据正确时的运行结果

  1. 数据错误时的运行结果

给定三点共线不能组成三角形

 

 4.源代码

1.Figure类

public abstract class Figure {
    public Point point1;
    protected Figure(Point point1){
        this.point1 = point1;
    }
    protected Figure(int x1,int y1){
        this.point1.x = x1;
        this.point1.y = y1;
    }
    public String toString(){
        return this.point1==null?"":this.point1.toString();
    }
}

2.Point类

public class Point {
    public int x,y;

    public Point(int x, int y) throws IllegalArgumentException{
        if(x<0||y<0){
            throw new IllegalArgumentException("输入的x,y不能小于0");
        }
        this.x = x;
        this.y = y;
    }

    public Point(){
        this(0,0);
    }

    public Point(Point p){
        this(p.x,p.y);
    }
    public  String toString(){
        return "(" + this.x + "," + this.y + ")";
    }
}

 3.Line类

public class Line extends Figure {
    public Point point2;

    public Line(Point point1, Point point2) {
        super(point1);
        this.point2 = point2;
    }

    public Line(int x1,int y1,int x2,int y2){
        super(x1,x2);
        this.point2.x = x2;
        this.point2.y = y2;
    }

    public double length(){
         int a= point1.x- point2.x,b = point1.y- point2.y;
         return Math.sqrt(a*a +b*b);
    }

    @Override
    public String toString() {
        return "一条直线,起点" + point1.toString() + ",终点" + point2.toString()
                +",长度" + String.format("%1.2f",length());
    }
}

4.CloseFigure类

public abstract class ClosedFigure extends Figure{
    protected String shape;
    protected ClosedFigure(String shape,Point point1){
        super(point1);
        this.shape= shape;
    }
    protected  ClosedFigure(){
        this("",new Point());
    }
    public abstract double perimeter();
    public abstract double area();
    public void  print(){
        System.out.println(this.shape+this.toString()+","+String.format("周长“%1.2f,面积%1.2f"
               ,this.perimeter(),this.area()));
    }
}

5.Polygon类

public class Polygon extends ClosedFigure{
    private Point[] points;
    public Polygon(Point[] points) throws IllegalArgumentException{
        super("多边形",points[0]);
        if(points.length<3){
            throw new IllegalArgumentException("构成多边形的点数不能小于3");
        }
        this.points = points;
    }
    public String toString(){
        String str = "(" + points.length + "个点" +this.points[0].toString();
        for (int i = 1; i < points.length; i++) {
            str += ","+this.points[i].toString();
        }
        return str+")";
    }
    public double perimeter(){
        double perim = 0;
        for (int i = 0; i < points.length; i++) {
            perim += new Line(points[i],points[(i+1)%points.length]).length();
        }
        return perim;
    }
    public double area(){
        double sum = 0;
        for (int i = 1; i < points.length-1; i++) {
            sum += new Triangle(points[0],points[i],points[i+1]).area();
        }
        return sum;
    }
}

6.Triangle类

public class Triangle extends ClosedFigure{
    public Point point2,point3;
    protected double a,b,c;
    public Triangle(Point point1,Point point2,Point point3) throws IllegalArgumentException{
        super("三角形",point1);
        if((point1.x- point2.x)*(point2.y- point3.y)==(point1.y - point2.y)* (point2.x- point3.x))
        {
            throw new IllegalArgumentException("三点共线不能构成三角形");
        }
        this.point2 = point2;
        this.point3 = point3;
        this.a = new Line(point1,point2).length();
        this.b = new Line(point3,point2).length();
        this.c = new Line(point1,point3).length();
    }
    public Triangle(Point point1,double a,double b,double c){
        super("三角形",point1);
        this.a = a;
        this.b = b;
        this.c = c;
    }
    public String toString(){
        return "3点坐标" + super.toString()+"," + (this.point2==null?"":
                this.point2.toString())+","+(this.point3==null?"":this.point3.toString()) +
                ",3边长"+ String.format("%1.2f,%1.2f,%1.2f)",this.a,this.b,this.c);
    }

    @Override
    public double perimeter() {
        return a+b+c;
    }

    @Override
    public double area() {
        double s = (a+b+c)/2;
        return Math.sqrt(s*(s-a)*(s-b)*(s-c));
    }
}

7.Rectangle类

public class Rectangle extends Polygon{
    double width,length;

    public Rectangle(Point[] points,double width,double length) throws IllegalArgumentException{
        super(points);
        if(width<0||length<0){
            throw new IllegalArgumentException("矩形的长和宽要大于0");
        }
        this.width = width;
        this.length = length;
    }

    @Override
    public String toString() {
        return "长方形有" + super.toString() + "长方形的长为:" + length + ",宽为:" +width;
    }

    @Override
    public double perimeter() {
        return 2*(width + length);
    }

    @Override
    public double area() {
        return width * length;
    }
}

8.测试类

public class Exception {
    public static void main(String[] args) {
        Point point1 = new Point(100,100);
        ClosedFigure cfig = new Triangle(point1,new Point(100,300),new Point(140,130));
        cfig.print();
        Point[] pentagon = {point1,new Point(200,100),new Point(200,100),new Point(140,130)};
        cfig = new Polygon(pentagon);
        cfig.print();
    }
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到