21.10.12
用接口、多态、继承、类计算三角形、矩形、圆形、梯形的周长及面积。
1:circle
package classCollection;
/**
* 版权声明:
* 作者:子子
* Copyright (C) 2021 10 12
*/
class Triangle implements Graph {
// 实现面积 周长函数 构造函数 判断能否组成梯形
double s1;
double s2;
double s3;
Triangle(double s1, double s2, double s3){
if(rightTriangle(s1, s2, s3)){
this.s1 = s1;
this.s2 = s2;
this.s3 = s3;
}else{
System.out.println("不可构成三角形!");
}
}
@Override
public double area() {
double p = (s1 + s2 + s3) / 2;
double s = p * (p - s1) * (p - s2) * (p - s3);
s = Math.pow(s,0.5);
return s;
}
@Override
public double perimeter() {
return s1 + s2 + s3;
}
public boolean rightTriangle(double s1, double s2, double s3){ // 判断能否构成三角形
if((s1+s2)>s3 &&(s1+s3)>s2 &&(s2+s2)>s1 && (s1-s2)<s3 && (s1-s3)<s2 && (s2-s3)<s1){
return true;
}
return false;
}
}
2:Rectangular
package classCollection;
/**
* 版权声明:
* 作者:子子
* Copyright (C) 2021 10 12
*/
class Rectangular implements Graph {
// 矩形类 实现面积 周长函数 矩形的构造函数
double s1;
double s2;
Rectangular(double s1, double s2){
this.s1 = s1;
this.s2 = s2;
}
@Override
public double area() {
return s1 * s2;
}
@Override
public double perimeter() {
return (s1 + s2) * 2;
}
}
3:Trapezoid
package classCollection;
/**
* 版权声明:
* 作者:子子
* Copyright (C) 2021 10 12
*/
class Trapezoid implements Graph {
// 实现面积 周长函数 构造函数 判断能否组成梯形
double s1;//上底
double s2;//下底
double h;//高
double z;//腰
double y;//腰
Trapezoid(double s1, double s2, double h, double z, double y){ // 构造函数
if(rightTrapezoid(s1, s2, h, z, y)){
this.s1 = s1;
this.s2 = s2;
this.h = h;
this.y = y;
this.z = z;
}else {
System.out.println("此梯形不成立!");
}
}
@Override
public double area() {
return ((s1 + s2) * h) / 2;
}
@Override
public double perimeter() {
return (s1 + s2 + z + y);
}
public boolean rightTrapezoid(double s1, double s2, double h, double z, double y){
//用于判断 是否可以组成梯形 用勾股定理
double d = s1;
double d2 = s2;
if(s2 > s1){
d = s2;
d2 = s1;
}
double zd = (z * z) - (h * h);
zd = Math.pow(zd,0.5);
double yd = d - d2 -zd;
double yy = (yd * yd) + (h * h);
yy = Math.pow(yy, 0.5);
if(yy == y){
return true;
}
return false;
}
}
4:Triangle
package classCollection;
/**
* 版权声明:
* 作者:子子
* Copyright (C) 2021 10 12
*/
class Triangle implements Graph {
// 实现面积 周长函数 构造函数 判断能否组成梯形
double s1;
double s2;
double s3;
Triangle(double s1, double s2, double s3){
if(rightTriangle(s1, s2, s3)){
this.s1 = s1;
this.s2 = s2;
this.s3 = s3;
}else{
System.out.println("不可构成三角形!");
}
}
@Override
public double area() {
double p = (s1 + s2 + s3) / 2;
double s = p * (p - s1) * (p - s2) * (p - s3);
s = Math.pow(s,0.5);
return s;
}
@Override
public double perimeter() {
return s1 + s2 + s3;
}
public boolean rightTriangle(double s1, double s2, double s3){ // 判断能否构成三角形
if((s1+s2)>s3 &&(s1+s3)>s2 &&(s2+s2)>s1 && (s1-s2)<s3 && (s1-s3)<s2 && (s2-s3)<s1){
return true;
}
return false;
}
}
5:main
package classCollection;
/**
* 版权声明:
* 作者:子子
* Copyright (C) 2021 10 12
*/
public class Main {
public static void main(String[] args) {
//创建(可成立)三角形:
Graph triangle1 = new Triangle(3, 4, 5);
if(triangle1.area() != 0){
System.out.println("此三角形 面积为:"+ triangle1.area() +
" 周长为:"+ triangle1.perimeter());
}
//创建(不可实现)三角形:
Graph triangle2 = new Triangle(1, 1, 5);
if(triangle2.area() != 0){
System.out.println("此三角形 面积为:"+ triangle2.area() +
" 周长为:"+ triangle2.perimeter());
}
//创建圆形:
Graph circle = new Circle(5);
System.out.println("此圆形 面积为:" + circle.area() +
" 周长为:"+circle.perimeter());
//创建矩形:
Graph rectangular = new Rectangular(2, 4);
System.out.println("此矩形 面积为:" + rectangular.area() +
" 周长为:"+rectangular.perimeter());
//创建(可实现)梯形:
Graph trapezoid1 = new Trapezoid(3, 7, 3, 3, 5);
if(trapezoid1.area() != 0){
System.out.println("此梯形 面积为:"+ trapezoid1.area()+
" 周长为:"+ trapezoid1.perimeter());
}
//创建(不可实现)梯形:
Graph trapezoid2 = new Trapezoid(2, 3, 3, 100, 1);
if(trapezoid2.area() != 0){
System.out.println("此梯形 面积为:"+ trapezoid1.area()+
" 周长为:"+ trapezoid2.perimeter());
}
}
}
6:接口
package classCollection;
/**
* 版权声明:
* 作者:子子
* Copyright (C) 2021 10 12
*/
interface Graph {
// 接口 声明周长和面积函数
double area();
double perimeter();
}