栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

用JAVA代码利用坐标构造三角形、椭圆、直线并求其周长、面积

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用JAVA代码利用坐标构造三角形、椭圆、直线并求其周长、面积

用JAVA代码利用坐标构造三角形、椭圆、线段线并求其周长、面积
  • 主测试程序
  • ShapeCreator类
  • Shape类
  • Oval类
  • line类
  • Rectangle类
  • Triangle类

本程序主要靠编写Shape类、矩形类、三角形类、线段类与图形构造类,共同实现求上述图形的面积、周长。其中涉及到字符数组与整数数组的转换,字符数组与坐标数组的转换

主测试程序
import java.awt.*;
import java.util.Scanner;
public class ShapeTest {
    public static void main(String[] args) {
//        输入图形种类
        System.out.println("Please enter the graphic which you need to calculate:");
        System.out.println("Line(0)/Triangle(1)/Rectangle(2)/Oval(3)");
//        捕捉异常
        try(Scanner sc=new Scanner(System.in);){
            String tmp=sc.nextLine();
//            定义kind为输入图形种类,Integer.parseInt()为解析方法,将输入的字符串解析为Int型
            int kind=Integer.parseInt(tmp);
//            输入坐标
            System.out.println("Please enter the point(divided by space):");
            tmp=sc.nextLine();
//            split(a)方法为分割方法,将被a(这个a可能为空格,也可能为,或别的)分隔的内容分隔为几个独立的字符串集
            String[] sp= tmp.split(" ");
//            定义坐标点数组
            Point[] PtArray=new Point[sp.length];
//            for语句分别将坐标点输入到PtArray[]中
            for (int i = 0;i < sp.length ;i ++) {
                String[] points = sp[i].split(",");
                Point point = new Point(Integer.parseInt(points[0]),Integer.parseInt(points[1]));
                PtArray[i] = point;
            }
//            定义Shane型对象,调用ShapeCreator中的createShape方法
            Shape shp= ShapeCreator.createShape(kind,PtArray);
            System.out.println("The graphic is:"+shp.getName());
            System.out.println("Area of the graphic is:"+shp.area());
            System.out.println("Perimeter of teh graphic is:"+shp.perimeter());
        }
    }
}

ShapeCreator类
import java.awt.*;

public class ShapeCreator {
    public static Shape createShape(int clsNo, Point[] ptArray){
        Shape shp = null;
        switch (clsNo){
            case 0:
                shp=new Line(ptArray);
                break;
            case 1:
                shp=new Triangle(ptArray);
                break;
            case 2:
                shp=new Rectangle(ptArray);
                break;
            case 3:
                shp=new Oval(ptArray);
                break;
            default:
                shp=Shape.NULL;
                break;
        }
        return shp;
    }
}
Shape类
//定义Shape类
import java.awt.*;
public abstract class Shape {
//    构造方法
    public static Shape NULL = new Shape(){
        {name = "NULL";
        vertexArray = new Point[0];
        }
        public double area(){
            return  0;
        }
        public double perimeter(){
            return 0;
        }
    };
    protected String name;
    protected Point[] vertexArray;
    public abstract double area();
    public abstract double perimeter();
    public String getName(){
        return name;
    }

}
Oval类
import java.awt.*;

public  class Oval extends Shape{
//输入两坐标为以椭圆外接矩形对角线上两端点
    String name="椭圆";
// 判定是否可以构成椭圆
    public Oval(Point[] PtArray) {
        this.vertexArray=PtArray;
        if((vertexArray[0].x==vertexArray[1].x)||(vertexArray[0].y==vertexArray[1].y)){
            System.out.println("格式错误!以下结果无效");
        }
    }
//求椭圆面积
    @Override
    public double area() {
        return Math.PI*Math.abs(vertexArray[0].x-vertexArray[1].x)*Math.abs(vertexArray[0].y-vertexArray[1].y)*0.25;
    }
//求椭圆周长
    @Override
    public double perimeter() {
        double L ;
        double b = Math.abs(vertexArray[0].x-vertexArray[1].x);
        double a = Math.abs(vertexArray[0].x-vertexArray[1].x);
        if (a>=b) {
            L = 2 * Math.PI * b + 4 * (a + b);
        }else{
            L = 2 * Math.PI * a + 4 * (a + b);
        }
        return L;
    }
//    返回椭圆名字
    @Override
    public String getName() {
        return name;
    }
}
line类
import java.awt.*;

public class Line extends Shape{

    String name="直线";

    public Line(Point[] PtArray) {
        this.vertexArray=PtArray;
        if((vertexArray[0].x==vertexArray[1].x)&&(vertexArray[0].y==vertexArray[1].y)){
            System.out.println("格式错误!以下结果无效");
        }
    }

    @Override
    public double area() {
        return 0;
    }

    @Override
    public double perimeter() {
        return Math.abs(Math.sqrt(Math.pow((vertexArray[1].x-vertexArray[0].x),2)+Math.pow((vertexArray[1].y-vertexArray[0].y),2)));
    }

    @Override
    public String getName() {
        return name;
    }
}

Rectangle类
import java.awt.*;

public class Rectangle extends Shape {
    String name="矩形";
    public Rectangle(Point[] PtArray) {
        this.vertexArray=PtArray;
        if((vertexArray[0].x==vertexArray[1].x)||vertexArray[0].y==vertexArray[1].y){
            System.out.println("格式错误!以下结果无效");
        }
    }
//求矩形面积
    @Override
    public double area() {
        return (Math.abs(vertexArray[0].x-vertexArray[1].x))*Math.abs((vertexArray[0].y-vertexArray[1].y));
    }
//求矩形周长
    @Override
    public double perimeter() {
        return 2*(Math.abs(vertexArray[0].x-vertexArray[1].x)+Math.abs(vertexArray[0].y-vertexArray[1].y));
    }

    @Override
    public String getName() {
        return name;
    }
}
Triangle类
import java.awt.*;

public class Triangle extends Shape {

    String name="三角形";
//构造函数
    public Triangle(Point[] PtArray) {
        this.vertexArray=PtArray;
        //判定三角形三边是否满足三角形定义,abc分别为三边
//        Math.pow(a,b)返回a的b次方
//        Math.sqrt(a)返回a的算术平方根
        double a = Math.sqrt(Math.pow((vertexArray[0].x-vertexArray[1].x),2)+Math.pow((vertexArray[0].y-vertexArray[1].y),2));
        double b = Math.sqrt(Math.pow((vertexArray[0].x-vertexArray[2].x),2)+Math.pow((vertexArray[0].y-vertexArray[2].y),2));
        double c = Math.sqrt(Math.pow((vertexArray[1].x-vertexArray[2].x),2)+Math.pow((vertexArray[1].y-vertexArray[2].y),2));
        if ((a +b 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300972.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号