你这题目太模糊
上一次不是提问过啦?
package com.study.shapes;
import java.util.Scanner;
public class Triangle extends Shape {
private double bottom; // 底部
private double height; // 高度
public Triangle() {
@SuppressWarnings("resource") // 防止警告
Scanner obj = new Scanner(System.in);
try {
System.out.print("Please input the bottom and height of the Triangle: ");
this.bottom = obj.nextDouble();
this.height = obj.nextDouble();
} catch (Exception e) {
this.bottom = 2.0;
this.height = 1.0;
}
}
@Override // 方法覆盖
public double area() {
// TODO Auto-generated method stub
return 0.5 * this.height * this.bottom;
}
}
好的,以下是一个完整的定义了 Triangle
接口的 Java 代码示例:
public interface Triangle {
/**
* 获取三角形的面积
*/
public double getArea();
/**
* 获取三角形的周长
*/
public double getPerimeter();
}
在这个接口中,我们定义了两个抽象方法 getArea()
和 getPerimeter()
,用于求三角形的面积和周长。这些方法没有具体的实现,需要在实现这个接口的类中进行具体实现。
注意,接口中的方法默认为 public abstract,不需要显式地指定这些修饰符。另外,接口中的方法都是抽象的,不包含方法体,需要在实现类中进行具体实现。你可以在实现类中实现这个接口,并根据实际情况提供具体的算法来计算三角形的面积和周长。
public class TriangleImpl implements Triangle {
private double a, b, c;
public TriangleImpl(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
public double getArea() {
double s = getPerimeter() / 2;
return Math.sqrt(s * (s - a) * (s - b) * (s - c));
}
@Override
public double getPerimeter() {
return a + b + c;
}
}
在这个实现类中,我们使用海伦公式来计算三角形的面积,实现了 getArea()
方法,并根据三角形的三条边长实现了 getPerimeter()
方法。
import java.util.Scanner;
interface nature{ //定义属性接口
public int area(); //计算面积
public int girth(); //计算周长
public void showarea(); //显示面积
public void showgirth(); //显示周长
}
class triangle implements nature{ //定义三角形类实现属性接口
private int length; // 三角形三边
private int wide;
private int high;
triangle(){
}
triangle(int l,int w,int h){
length=l;
wide=w;
high=h;
}
public void setlength(int l){
length=l;
}
public void setwide(int w){
wide=w;
}
public void sethigh(int h){
high=h;
}
public int area() {
int p=(length+wide+high)/2;
return (int)(Math.sqrt(p*(p-length)*(p-wide)*(p-high)));
}
public int girth() {
return length+wide+high;
}
public void showarea() {
System.out.println("面积:"+area());
}
public void showgirth() {
System.out.println("周长:"+girth());
}
}
class rectangle implements nature{ //定义长方形类实现属性接口
private int length; //长方形两边
private int wide;
rectangle(){
}
rectangle(int l,int w){
length=l;
wide=w;
}
public void setlength(int l){
length=l;
}
public void setwide(int w){
wide=w;
}
public int area() {
return length*wide;
}
public int girth() {
return (length+wide)*2;
}
public void showarea() {
System.out.println("面积:"+area());
}
public void showgirth() {
System.out.println("周长:"+girth());
}
}
public class test { //测试类
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
triangle t=new triangle(); //创建一个三角形对象
rectangle r=new rectangle(); //创建一个长方形对象
System.out.println("请输入三角形边长:");
t.setlength(sc.nextInt());
t.setwide(sc.nextInt());
t.sethigh(sc.nextInt()); //此处没有检测三边是否合法,楼主请自己实现吧
t.showarea();
t.showgirth();
System.out.println("请输入长方形边长:");
r.setlength(sc.nextInt());
r.setwide(sc.nextInt());
r.showarea();
r.showgirth();
}
}
定义Triangle接口
package test;
public interface Triangle {
double getArea();
double getPerimeter();
}
定义等边三角形实现类
package test;
import java.math.RoundingMode;
import java.text.NumberFormat;
public class EqurilateralTriangle implements Triangle {
//定义私有变量边长a,默认为1.0
private double a = 1.0d;
//定义数字格式化
private static NumberFormat numberFormat = NumberFormat.getNumberInstance();
static {
//不使用四舍五入
numberFormat.setRoundingMode(RoundingMode.DOWN);
//最多保留两位小数点
numberFormat.setMaximumFractionDigits(2);
//最少也是保留小数点后两位
numberFormat.setMinimumFractionDigits(2);
}
//提供空参构造方法
public EqurilateralTriangle() {}
//提供有参数构造方法
public EqurilateralTriangle(double a) {
//重新给边长赋值
this.a = a;
}
//重新求面积的方法
@Override
public double getArea() {
double area = Math.sqrt(3.0) / 4 * a * a;
//保留两位小数点
return Double.parseDouble(numberFormat.format(area));
}
@Override
public double getPerimeter() {
double perimeter = a * 3;
//保留小数点后两位
return Double.parseDouble(numberFormat.format(perimeter));
}
//提供getter方法
public double getA() {
return this.a;
}
//提供setter方法
public void setA(double a) {
this.a = a;
}
//重写同String方法
@Override
public String toString() {
return String.format("等边三角形 [边长:%s,面积:%s,周长:%s]",
numberFormat.format(this.getA()), numberFormat.format(this.getArea()), numberFormat.format(this.getPerimeter()));
}
}
定义直角三角形实现类
package test;
import java.math.RoundingMode;
import java.text.NumberFormat;
public class RightTriangle implements Triangle{
//直角边a,默认为1.0
private double a = 1.0;
//直角边b,默认为1.0
private double b = 1.0;
//定义数字格式化
private static NumberFormat numberFormat = NumberFormat.getNumberInstance();
static {
//不使用四舍五入
numberFormat.setRoundingMode(RoundingMode.DOWN);
//最多保留两位小数点
numberFormat.setMaximumFractionDigits(2);
//最少也是保留小数点后两位
numberFormat.setMinimumFractionDigits(2);
}
//提供空参构造器
public RightTriangle() {}
//提供带参数构造器
public RightTriangle(double a, double b) {
this.a = a;
this.b = b;
}
@Override
public double getArea() {
//面积保留小数点后两位
return Double.parseDouble(numberFormat.format(a * b / 2));
}
@Override
public double getPerimeter() {
//周长保留小数点后两位
return Double.parseDouble(numberFormat.format(a + b + Math.sqrt(a * a + b * b)));
}
//提供getter/setter方法
public double getA() {
return this.a;
}
public void setA(double a) {
this.a = a;
}
public double getB() {
return this.b;
}
public void setB(double b) {
this.b = b;
}
//重写toString方法
@Override
public String toString() {
return String.format("直角三角形 [直角边a:%s,直角边b:%s,面积:%s,周长:%s]",
numberFormat.format(this.getA()), numberFormat.format(this.getB()), numberFormat.format(this.getArea()), numberFormat.format(this.getPerimeter()));
}
}
编写测试类
package test;
import java.util.*;
public class Test2 {
public static void main(String[] args) {
Random random = new Random();
//构建空参等边三角形
EqurilateralTriangle nonArgEquilaterTriangle = new EqurilateralTriangle();
//构建带参等边三角形,边长为1-15之间的整数
EqurilateralTriangle hasArgEquilaterTriangle = new EqurilateralTriangle(1.0 + random.nextInt(15));
//构建空参直角三角形
RightTriangle nonArgRightTriangle = new RightTriangle();
//构建带参直角三角形,边长为2-12之间的整数
RightTriangle hasArgRightTriangle = new RightTriangle(2.0 + random.nextInt(11), 2.0 + random.nextInt(11));
//放进arrayList中
List<Triangle> triangles = new ArrayList<>();
triangles.add(nonArgEquilaterTriangle);
triangles.add(hasArgEquilaterTriangle);
triangles.add(nonArgRightTriangle);
triangles.add(hasArgRightTriangle);
//循环输出这些对象
for (Triangle triangle : triangles) {
System.out.println(triangle.toString());
}
System.out.println("按照周长由大到小排序");
Collections.sort(triangles, new Comparator<Triangle>() {
@Override
public int compare(Triangle o1, Triangle o2) {
return o1.getPerimeter() - o2.getPerimeter() >= 0 ? 1 : -1;
}
});
Iterator<Triangle> iterator = triangles.iterator();
while (iterator.hasNext()) {
Triangle next = iterator.next();
System.out.println(next.toString());
}
}
}
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
好的,这里是一个例子:
public interface Triangle {
public double getArea();
}
public class EquilateralTriangle implements Triangle {
private double sideLength;
public EquilateralTriangle(double sideLength) {
this.sideLength = sideLength;
}
@Override
public double getArea() {
return Math.sqrt(3) / 4 * sideLength * sideLength;
}
}
public class IsoscelesTriangle implements Triangle {
private double baseLength;
private double height;
public IsoscelesTriangle(double baseLength, double height) {
this.baseLength = baseLength;
this.height = height;
}
@Override
public double getArea() {
return 0.5 * baseLength * height;
}
}
在上面的例子中,我们定义了一个 Triangle
接口,其中有一个 getArea
方法,用于计算三角形的面积。然后我们定义了两个类 EquilateralTriangle
和 IsoscelesTriangle
分别实现了 Triangle
接口,并实现了 getArea
方法。EquilateralTriangle
表示等边三角形,使用边长来计算面积;IsoscelesTriangle
表示等腰三角形,使用底边长和高来计算面积。
我们可以使用以下代码测试:
public class TestTriangle {
public static void main(String[] args) {
Triangle triangle1 = new EquilateralTriangle(5);
System.out.println("Equilateral triangle with side length of 5 has an area of " + triangle1.getArea());
Triangle triangle2 = new IsoscelesTriangle(6, 8);
System.out.println("Isosceles triangle with base length of 6 and height of 8 has an area of " + triangle2.getArea());
}
}
输出结果如下:
Equilateral triangle with side length of 5 has an area of 10.825317547305483
Isosceles triangle with base length of 6 and height of 8 has an area of 24.0
如果我的回答解决了您的问题,请采纳!