Java的练习题看一看

img

img


定义一个借口triangle 该接口中有两个抽象方法 求面积方法

你这题目太模糊

上一次不是提问过啦?

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/3198116
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:定义一个Triangle类表示三角形,测试这个三角形类的所有方法
  • 除此之外, 这篇博客: 面向对象程序设计(java)课堂代码中的 Triangle.java 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 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 方法,用于计算三角形的面积。然后我们定义了两个类 EquilateralTriangleIsoscelesTriangle 分别实现了 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

如果我的回答解决了您的问题,请采纳!