求解几何图形面积和周长

//java编程
//求解集合图形(包括三角形、矩形、圆)的面积和周长
//技术:继承、接口、上转型对象、包
//package oop123;
import java.io.*; //引入键盘输入所需的类所在的包
interface getProperty //接口定义
{
double Pi=3.1415926;
double getArea();
double getCircum();
String getName();
}
class Point //定义点
{
double x,y;
Point(double a,double b)
{
//this.x=a;
//this.y=b;
x=a;
y=b;
}
}
class Disp //定义屏幕输出需要的类
{
double area; //图形面积
double circum; //图形周长
String drawingName; //图形名称
Disp(double a,double b,String ss)
{
this.area=a;
this.circum=b;
this.drawingName=ss;
}
public void display()
{
System.out.println("Drawing is "+drawingName);
System.out.println("Area="+area+" Circum="+circum);
}
}
//////////////////////////////////////////////////////////////////////
class Triangle implements getProperty //定义三角形
{
Point p1,p2,p3; //三角形的三点
double s1,s2,s3; //三角形的三边
String drawingName="Triangle";
Triangle(Point p1,Point p2,Point p3)
{
this.p1=p1;
this.p2=p2;
this.p3=p3;
this.s1=Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
this.s2=Math.sqrt( (p3.x-p2.x)*(p3.x-p2.x)+(p3.y-p2.y)*(p3.y-p2.y));
this.s3=Math.sqrt( (p1.x-p3.x)*(p1.x-p3.x)+(p1.y-p3.y)*(p1.y-p3.y));
}
public double getArea()
{
double ss,ssa;
ss=(s1+s2+s3)*Pi/2.0/Pi;
ssa=Math.sqrt(ss*(ss-s1)*(ss-s2)*(ss-s3));
return ssa;
}
public double getCircum()
{
return s1+s2+s3;
}
public String getName()
{
return drawingName;
}
public boolean isOrNotTriangle() //是否构成三角形
{
if(s1+s2>s3&&s2+s3>s1&&s3+s1>s2)
return true;
else return false;
}
Triangle getObject()
{
if(isOrNotTriangle())
return new Triangle(p1,p2,p3);
else return null;
}
}
///////////////////////////////////////////////////////////////////////
class Circle implements getProperty //定义圆
{
Point p1; //圆心
double radius; //半径
String drawingName="Circle";
Circle(Point p1,double radius)
{
this.p1=p1;
this.radius=radius;
}
public double getArea()
{
double ssa;
ssa=Math.PI*radius*radius;
return ssa;
}
public double getCircum()
{
return Math.PI*2.0*radius;
}
public String getName()
{
return drawingName;
}
public boolean isOrNotCircle()
{
return true;
}
}
////////////////////////////////////////////////////////////////////////////
class Rectangle implements getProperty //定义长方形
{
Point p1,p2;
double s1,s2;
String drawingName="Rectangle";
Rectangle(Point p1,Point p2)
{
this.p1=p1;
this.p2=p2;
this.s1=Math.sqrt( (p1.x-p2.x)*(p1.x-p2.x));
this.s2=Math.sqrt( (p1.y-p2.y)*(p1.y-p2.y));
}
public double getArea()
{
return s1*s2;
}
public double getCircum()

{
return s1+s2+s1+s2;
}
public String getName()
{
return drawingName;
}
public boolean isOrNotRectangle()
{
return true;
}
}
//////////////////////////////////////////////////////////////////
public class Main extends Disp //定义main()所在的类
{
Main(double a,double b,String ss)
{
super(a,b,ss);
}
public static void main(String args[])throws IOException
{
BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in));
String strxx;
for(;true;)
{
System.out.print("Input String like Triangle、Rectangle or Circle or press "
+ "Ctrl + c to quit:");
strxx=keyin.readLine();
if(strxx.length()==0) continue;

char charxx;
charxx=strxx.toUpperCase().charAt(0);
switch(charxx)
{
case'T': //三角形:输入三点
System.out.println("Please input(triangle) 1 point x(enter)y(enter)");
Point p1=new Point(aVar(keyin),aVar(keyin));
System.out.println("Please input 2 point x(enter)y(enter)");
Point p2=new Point(aVar(keyin),aVar(keyin));
System.out.println("Please input 3 point x(enter)y(enter)");
Point p3=new Point(aVar(keyin),aVar(keyin));
Triangle t1=new Triangle(p1,p2,p3).getObject(); //构造三角形
if(!(t1==null))
{
Disp tdisp=new Main(t1.getArea(),t1.getCircum(),t1.getName());
tdisp.display();
}
else
{
System.out.println("输入的点不能构成三角形!");
}
break;
//---------------------------------------------------------------
case'C': //圆:圆心及半径
System.out.println("Please input (circle) center x(enter)y(enter)");
Point p4=new Point(aVar(keyin),aVar(keyin));
System.out.println("Please input radius x(enter)");
double radius=aVar(keyin);
Circle t2=new Circle(p4,radius); //构造圆
Disp cdisp=new Main(t2.getArea(),t2.getCircum(),t2.getName());
cdisp.display();
break;
//--------------------------------------------------------------------
case'R': //长方形:输入两点
System.out.println("Please input (rectangle)1 point x(enter)y(enter)");
Point p6=new Point(aVar(keyin),aVar(keyin));
System.out.println("Please input 2 point x(enter)y(enter)");
Point p7=new Point(aVar(keyin),aVar(keyin));
Rectangle t3=new Rectangle(p6,p7); //构造长方形
Disp rdisp=new Main(t3.getArea(),t3.getCircum(),t3.getName());
rdisp.display();
break;
//----------------------------------------------------------------------------
default:
System.out.println("Error!please input String like Triangle,REctangle or Circle");
System.out.println("or T(t),R(r),C(c);");
}

}
}
static double aVar(BufferedReader keyin)throws IOException
{
String xx;
xx=keyin.readLine();return Double.parseDouble(xx);
}
}


相关文档
最新文档