Java | 一个接口的实例

一、概念

        接口是抽象方法的集合,是一种统一的操作标准,可以理解为现实生活中的USB接口。

        一个类通过继承接口的方式,从而来继承接口的抽象方法。接口的编写方式与类相似,但接口并不是类。类描述对象的属性和方法。接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

二、实例

任务:

编写一个能求解多种平面图形(矩形、梯形、圆形、三角形)面积与周长的程序。要求:

(1)程序运行时,用户能选择图形类型;
(2)用户选择图形类型后,程序提示输入确定该图形面积和周长的必要属性值;
(3)用户输入属性值后,程序能自动显示求解结果。
(4)求解完了一种图形周长面积后,程序再次返回(1),使用户能重新选择图形类型,也可以选择退出程序;

构造:

设计一个菜单类,展示平面图形的操作界面。用户可以通过输入序号选择要计算的图形。

设计一个接口,分别定义图形初始数据输入、判断能否构成图形、计算图形周长、计算图形面积 共 4 个抽象方法。

设计矩形、梯形、圆形、三角形等图形的类,依次继承并实现接口的抽象方法。

UML图:

代码:

Menu.java(菜单类)

import java.util.Scanner;

public class Menu {
    /**
     * 显示图形计算器界面
     * */
    public static void showMenu(){
        System.out.println("\n=====欢迎使用图形计算器======");
        System.out.println("1 -- 矩形");
        System.out.println("2 -- 梯形");
        System.out.println("3 -- 三角形");
        System.out.println("4 -- 圆形");
        System.out.println("=========================");
    }
    /**
     * @Description 选择图形序号
     */
    public static int chooseMenu(){
        System.out.print("请输入你需要计算的图形序号:");
        Scanner sc = new Scanner(System.in);
        int i = sc.nextInt();
        while (i<=0 || i>4){
            System.out.println("输入范围错误,请重新输入!");
            i = sc.nextInt();
        }
        return i;
    }
    /**
     * 主函数
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Plugin plugin = new Plugin();
        do {
            Menu.showMenu();
            switch (Menu.chooseMenu()) {
                case 1:
                    Graphics graphics = new Rectangular();
                    plugin.plugin(graphics);
                    break;
                case 2:
                    graphics = new Trapezoidal();
                    plugin.plugin(graphics);
                    break;
                case 3:
                    graphics = new Triangle();
                    plugin.plugin(graphics);
                    break;
                case 4:
                    graphics = new Round();
                    plugin.plugin(graphics);
                    break;
                default:
                    System.out.println("输入错误,请重新输入!");
            }
            System.out.println("\n是否结束?\n结束请输0,否则请输入任意数:");
        } while (CatchError.catchInt("","\t[警告]请输入一个整数!\n") != 0);
    }
}

class Plugin {
    public void plugin(Graphics graphics){
        graphics.graphicsInput();
        if(graphics.graphicsJudge()) {
            System.out.println("周长为" + graphics.calculatePerimeter());
            System.out.println("面积为" + graphics.calculateArea());
        }
        else
            System.out.println("输入的条件不能构成图形!");
    }
}

Graphics.java(接口)

public interface Graphics {
    /**
     * @Description 图形条件输入
     * */
    void graphicsInput();
    /**
     * @Description 判断能否构成图形,能够构成返回true,否则返回false
     * */
    boolean graphicsJudge();
    /**
     * @Description 计算图形面积,返回计算结果
     * */
    double calculateArea();
    /**
     * @Description 计算图形周长,返回计算结果
     * */
    double calculatePerimeter();
}

Rectangular.java(矩形类)

/**
 * @author 鷾
 * @Description 计算矩形的周长和面积
 */
public class Rectangular implements Graphics{
    /** 长度 */
    private double length;
    /** 宽度 */
    private double height;
    /**
     * @Description 判断能否构成图形
     * */
    public boolean graphicsJudge(){
        return true;
    }
    /**
     * @Description 输入长方形的信息
     * */
    public void graphicsInput(){
        System.out.print("输入长度:");
        length = CatchError.catchDouble("","\t[警告]请输入一个整数或者小数!\n输入长度:");
        System.out.print("输入宽度:");
        height = CatchError.catchDouble("","\t[警告]请输入一个整数或者小数!\n输入宽度:");
    }

    /**
     * @Description 计算面积
     * */
    public double calculateArea(){
        return  length*height;
    }
    /**
     * @Description 计算周长
     * */
    public double calculatePerimeter(){
        return 2*(length+height);
    }
}

Trapezoidal.java(梯形类)

/**
 * @author 鷾
 * @Description 计算梯形的周长和面积
 */
public class Trapezoidal implements Graphics{
    /** 梯形下底 */
    private double bottom;
    /** 梯形上底 */
    private double top;
    /** 梯形高 */
    private double height;
    /** 梯形右斜边 */
    private double rightEdge;
    /** 梯形左斜边 */
    private double leftEdge;
    /**
     * @Description 判断能否构成图形
     * */
    public boolean graphicsJudge(){
        return true;
    }
    /**
     * @Description 输入梯形的信息
     * */
    public void graphicsInput(){
        System.out.print("输入下底的长度:");
        bottom = CatchError.catchDouble("","\t[警告]请输入一个整数或者小数!\n输入下底的长度:");
        System.out.print("输入上底的长度:");
        top = CatchError.catchDouble("","\t[警告]请输入一个整数或者小数!\n输入上底的长度:");
        System.out.print("输入高:");
        height = CatchError.catchDouble("","\t[警告]请输入一个整数或者小数!\n输入高:");
        System.out.print("输入右斜边的长度:");
        rightEdge = CatchError.catchDouble("","\t[警告]请输入一个整数或者小数!\n右斜边的长度:");
        System.out.print("输入左斜边的长度:");
        leftEdge = CatchError.catchDouble("","\t[警告]请输入一个整数或者小数!\n输入左斜边的长度:");
    }
    /**
     * @Description 计算面积
     * */
    public double calculateArea(){
        return  (top+bottom)*height/2;
    }
    /**
     * @Description 计算周长
     * */
    public double calculatePerimeter(){
        return bottom+top+rightEdge+leftEdge;
    }
}

Triangle.java(三角形类)

/**
 * @author 鷾
 * @Description 计算三角形的周长和面积
 */
public class Triangle implements Graphics{
    /** 三角形的边a */
    private double a;
    /** 三角形的边b */
    private double b;
    /** 三角形的边c */
    private double c;

    /**
     * @Description 判断三角形是否成立
     * */
    public boolean judge() {
        return a + b > c && b + c > a && a + c > b;
    }
    /**
     * @Description 判断能否构成图形
     * */
    public boolean graphicsJudge(){
        return judge();
    }
    /**
     * @Description 输入三角形的信息
     * */
    public void graphicsInput(){
        System.out.println("依次输入三条边的长度:");
        a = CatchError.catchDouble("","\t[警告]请输入一个整数或者小数!\n输入第一条边的长度:");
        b = CatchError.catchDouble("","\t[警告]请输入一个整数或者小数!\n输入第二条边的长度:");
        c = CatchError.catchDouble("","\t[警告]请输入一个整数或者小数!\n输入第三条边的长度:");
    }
    /**
     * @Description 计算面积
     * */
    public double calculateArea(){
        double s = (a + b + c) / 2f;
        return (float) Math.sqrt(s * (s - a) * (s - b) * (s - c));
    }
    /**
     * @Description 计算周长
     * */
    public double calculatePerimeter(){
        return a + b + c;
    }
}

Round.java(圆形类)

/**
 * @author 鷾
 * @Description 计算圆形的周长和面积
 */
public class Round implements Graphics{
    /** 半径 */
    private double r;
    /**
     * @Description 判断能否构成图形
     * */
    public boolean graphicsJudge(){
        return true;
    }
    /**
     * @Description 输入圆形的信息
     * */
    public void graphicsInput(){
        System.out.print("输入半径的长度:");
        r = CatchError.catchDouble("","\t[警告]请输入一个整数或者小数!\n输入半径:");
    }
    /**
     * @Description 计算面积
     * */
    public double calculateArea(){
        return Math.PI*r*r;
    }
    /**
     * @Description 计算周长
     * */
    public double calculatePerimeter(){
        return 2*Math.PI*r;
    }
}

CatchError.java(用于对输入的内容进行类型判断)

import java.util.Scanner;

public class CatchError {
    /**
     * @param promptMessage 输入提示信息
     * @param errMessage 错误提示信息
     * @return 输入的浮点型
     * @Description 对输入浮点型进行判断
     * */
    public static double catchDouble(String promptMessage, String errMessage) {
        Scanner sc = new Scanner(System.in);
        System.out.print(promptMessage);
        while(true) {
            try {
                return sc.nextDouble();
            } catch (Exception var3) {
                System.out.print(errMessage);
                sc.nextLine();
            }
        }
    }
    /**
     * @param promptMessage 输入提示信息
     * @param errMessage 错误提示信息
     * @return 输入的整型
     * @Description 对输入整型进行判断
     * */
    public static int catchInt(String promptMessage, String errMessage) {
        Scanner sc = new Scanner(System.in);
        System.out.print(promptMessage);
        while(true) {
            try {
                return sc.nextInt();
            } catch (Exception var3) {
                System.out.print(errMessage);
                sc.nextLine();
            }
        }
    }
    /**
     * @param promptMessage 输入提示信息
     * @param errMessage 错误提示信息
     * @return 输入的字符串
     * @Description 对输入字符串进行判断
     * */
    public static String catchString(String promptMessage, String errMessage) {
        Scanner sc = new Scanner(System.in);
        System.out.print(promptMessage);
        while(true) {
            try {
                return sc.next();
            } catch (Exception var4) {
                System.out.print(errMessage);
                sc.nextLine();
            }
        }
    }
}

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值