设计并定义一个图形类(Shape),用主类进行访问(Java)

自己设计并定义一个“图形类”(Shape),然后写一个主类,在其中创建Shape类的对象并对各个属性和方法进行访问。特别要求:需要有个方法从外界接受图形的名称。

//Shape类属性:name、周长perimeter、面积area
//Shape类方法:计算周长count_perimeter、判断多边形是否为正多边形judge、计算面积area
//Main类流程:输入图形名称 → 输入(各)边的长度 → 输出周长 → 输出圆、三角形、正多边形的面积
import java.util.Scanner;
public class Shape {
    
    
	String name; //定义名字
	double perimeter; //定义周长
	double area; //定义面积
	//计算周长
	double count_perimeter(double[] per){
    
    
		int i;
		for(i=0;i<per.length;i++){
    
    
			this.perimeter+=per[i]; //将边长的值累加在sum中
		}
		return this.perimeter;
	}
	//判断多边形是否为正多边形
	String judge(double[] per){
    
    
		String str="是";
		for(int i=1;i<per.length;i++){
    
    
			//只要有一条边与第一条边不相等,即不是正多边形
			if(per[0]!=per[i]){
    
    
				str="不是";
				break;
			}
		}
		return str;
	}
	//计算面积
	double area(double[] per){
    
    
		//计算圆的面积
		if(per.length==1){
    
    
			this.area=Math.pow(per[0], 2)/(4*Math.PI);
		}
		//计算任意三角形的面积
		else if(per.length==3){
    
    
			//用余弦定理求角A的余弦值
			double cos_A=(per[1]*per[1]+per[2]*per[2]-per[0]*per[0])/(2*per[1]*per[2]);
			//利用sin_A^2+cos_A^2=1求角A的正弦值
			double sin_A=Math.sqrt(1-cos_A*cos_A);
			//已知一个角和角的两条边的长度,即可求面积
			this.area=0.5*per[1]*per[2]*sin_A;
		}
		//计算任意正多边形的面积
		else{
    
    
			double x=per.length; //x=有几条边
			//借用余弦定理求每条边上的等腰三角形的腰的长度,赋值给b
			//(注意用弧度代入,不能直接用度数求余弦和正弦)
			double b=Math.sqrt((per[0]*per[0])/(2*(1-Math.cos(Math.PI*2/x))));
			//已知一个角和角的两条边的长度,即可求面积
			this.area=x*0.5*b*b*Math.sin(Math.PI*2/x);
		}
		return this.area;
	}
}

class Main{
    
    
	public static void main(String[] args){
    
    
		Shape s1=new Shape();
		Scanner input=new Scanner(System.in);
		System.out.print("请输入图形的名称(圆/三角形/多边形/不规则图形):");
		s1.name=input.next();
		int n,i; //用n记录边长的条数
		//判断该图形有几条边,并赋值给n,方便后续初始化per数组时定义数组长度
		//【注意】:字符串内容的比较需用equals,不能用==
		if(s1.name.equals("圆")) n=1;
		else if(s1.name.equals("三角形")) n=3;
		else{
    
    
			System.out.print("请确认该"+s1.name+"有几条边:");
			n=input.nextInt();
		}
		System.out.print("请输入"+s1.name+"(各边)的长度:");
		//用per数组储存输入的各边的长度
		double[] per=new double[n];
		for(i=0;i<per.length;i++){
    
    
			per[i]=input.nextDouble();
		}
		//计算并输出周长(保留3位小数)
		System.out.printf("您输入的"+s1.name+"的周长为:"+"%.3f",s1.count_perimeter(per));
		System.out.println(); //换行
		//计算圆/三角形/正多边形的面积
		if(s1.name.equals("不规则图形")){
    
    
			System.out.println("不规则图形暂不支持计算面积");
		}
		else{
    
    
			if(s1.name.equals("多边形")){
    
    
				//调用Shape类的judge方法判断多边形是否为正多边形
				//是则计算面积,不是则不计算面积
				if(s1.judge(per)=="是"){
    
    
					System.out.printf("您输入的"+s1.name+"的面积为:"+"%.3f",s1.area(per));
				}
				else System.out.println("非正多边形暂不支持计算面积");
			}
			//计算圆和三角形的面积
			else{
    
    
				System.out.printf("您输入的"+s1.name+"的面积为:"+"%.3f",s1.area(per));
			}
		}
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/CSDNWudanna/article/details/105586005