定义一个三角形类,该类包括3个Point对象。定义有参的构造方法,给定3个点,先判断是否构成三角形,如果不能构成三角形,初始化一个默认的三角形。定义无参的构造方法。提供求面积和周长的方法。最后编写一个类,测试该三角形类。
时间: 2023-08-31 20:19:39 浏览: 50
### 回答1:
```
import java.util.Arrays;
public class Triangle {
private Point[] points;
/**
* 有参构造方法,给定三个点
* @param a
* @param b
* @param c
*/
public Triangle(Point a, Point b, Point c) {
if (isValidTriangle(a, b, c)) {
this.points = new Point[]{a, b, c};
} else {
// 不能构成三角形,初始化一个默认的三角形
this.points = new Point[]{new Point(0, 0), new Point(0, 1), new Point(1, 0)};
}
}
/**
* 无参构造方法,初始化一个默认的三角形
*/
public Triangle() {
this.points = new Point[]{new Point(0, 0), new Point(0, 1), new Point(1, 0)};
}
/**
* 判断三个点是否能构成三角形
* @param a
* @param b
* @param c
* @return
*/
private boolean isValidTriangle(Point a, Point b, Point c) {
double[] lengths = new double[]{a.distance(b), a.distance(c), b.distance(c)};
Arrays.sort(lengths);
return lengths[0] + lengths[1] > lengths[2];
}
/**
* 求三角形的面积
* @return
*/
public double getArea() {
double a = points[0].distance(points[1]);
double b = points[0].distance(points[2]);
double c = points[1].distance(points[2]);
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
/**
* 求三角形的周长
* @return
*/
public double getPerimeter() {
double a = points[0].distance(points[1]);
double b = points[0].distance(points[2]);
double c = points[1].distance(points[2]);
return a + b + c;
}
}
```
测试类:
```
public class TriangleTest {
public static void main(String[] args) {
// 构造一个合法的三角形
Point a = new Point(0, 0);
Point b = new Point(0, 3);
Point c = new Point(4, 0);
Triangle t1 = new Triangle(a, b, c);
System.out.println("三角形面积:" + t1.getArea());
System.out.println("三角形周长:" + t1.getPerimeter());
// 构造一个不合法的三角形
Point d = new Point(0, 0);
Point e = new Point(0, 1);
Point f = new Point(0, 2);
Triangle t2 = new Triangle(d, e, f);
System.out.println("三角形面积:" + t2.getArea());
System.out.println("三角形周长:" + t2.getPerimeter());
}
}
```
### 回答2:
三角形是由三个顶点构成的图形,所以我们可以创建一个三角形类来表示一个三角形。该三角形类包括3个Point对象作为顶点,可以有参构造方法来初始化三个顶点。在构造方法中,我们需要判断给定的三个点是否能够构成一个三角形。
首先,我们可以计算出其中两条边的长度a和b,然后计算出两条边之间的夹角angle。如果其中一条边的长度为0或者夹角为180度,那么这三个点无法构成一个三角形。在这种情况下,我们初始化一个默认的三角形,三个顶点的坐标为(0, 0)、(1, 0)和(0, 1)。
接下来,我们可以提供方法来计算三角形的面积和周长。
计算三角形的面积可以使用海伦公式:
面积 = √(s * (s - a) * (s - b) * (s - c))
其中,s是三角形周长的一半,也就是(s = (a + b + c) / 2)。
计算三角形的周长可以直接返回边长之和:
周长 = a + b + c
最后,编写一个测试类来测试我们定义的这个三角形类。我们可以使用无参构造方法来创建一个三角形对象,然后调用面积和周长的方法来计算三角形的面积和周长,并打印输出结果。我们还可以使用有参构造方法来创建一个具体的三角形对象,并传入三个顶点的坐标,然后调用面积和周长的方法来计算该三角形的面积和周长,并打印输出结果。
### 回答3:
定义一个三角形类:
```java
public class Triangle {
private Point point1;
private Point point2;
private Point point3;
// 有参的构造方法
public Triangle(Point point1, Point point2, Point point3) {
// 先判断是否构成三角形
if (isTriangle(point1, point2, point3)) {
this.point1 = point1;
this.point2 = point2;
this.point3 = point3;
} else {
// 如果不能构成三角形,初始化一个默认的三角形
this.point1 = new Point(0, 0);
this.point2 = new Point(1, 0);
this.point3 = new Point(0, 1);
}
}
// 无参的构造方法
public Triangle() {
this(new Point(0, 0), new Point(1, 0), new Point(0, 1));
}
// 判断是否构成三角形的方法
private boolean isTriangle(Point point1, Point point2, Point point3) {
// 判断三点不共线即可判断是否构成三角形
return (point1.getX() - point3.getX()) * (point2.getY() - point3.getY()) != (point2.getX() - point3.getX()) * (point1.getY() - point3.getY());
}
// 求三角形面积的方法
public double getArea() {
double x1 = point1.getX();
double y1 = point1.getY();
double x2 = point2.getX();
double y2 = point2.getY();
double x3 = point3.getX();
double y3 = point3.getY();
return 0.5 * Math.abs((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)));
}
// 求三角形周长的方法
public double getPerimeter() {
double side1 = getDistance(point1, point2);
double side2 = getDistance(point2, point3);
double side3 = getDistance(point3, point1);
return side1 + side2 + side3;
}
// 计算两点之间距离的方法
private double getDistance(Point point1, Point point2) {
double x1 = point1.getX();
double y1 = point1.getY();
double x2 = point2.getX();
double y2 = point2.getY();
return Math.sqrt(Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2));
}
}
```
测试三角形类的类:
```java
public class TestTriangle {
public static void main(String[] args) {
// 使用有参构造方法创建一个合法的三角形
Triangle triangle1 = new Triangle(new Point(0, 0), new Point(3, 0), new Point(0, 4));
// 输出面积和周长
System.out.println("Triangle1 Area: " + triangle1.getArea());
System.out.println("Triangle1 Perimeter: " + triangle1.getPerimeter());
// 使用有参构造方法创建一个不合法的三角形
Triangle triangle2 = new Triangle(new Point(0, 0), new Point(1, 1), new Point(2, 2));
// 输出面积和周长,默认为初始化的默认三角形
System.out.println("Triangle2 Area: " + triangle2.getArea());
System.out.println("Triangle2 Perimeter: " + triangle2.getPerimeter());
// 使用无参构造方法创建一个默认的三角形
Triangle triangle3 = new Triangle();
// 输出面积和周长,为默认的三角形
System.out.println("Triangle3 Area: " + triangle3.getArea());
System.out.println("Triangle3 Perimeter: " + triangle3.getPerimeter());
}
}
```
以上就是定义一个三角形类并测试的完整代码,通过创建不同的三角形对象进行测试,可以得到对应的面积和周长。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![py](https://img-home.csdnimg.cn/images/20210720083646.png)