SCAU Java-随堂实验6-银行账户类的定义与使用

解题思路

  • 该题目要求需要采用抽象类/接口进行编程,可知这些所有形状可以有一个共同点,一个共同的父类,结合题目可知这个共同点即为求面积,但是因为每个形状求面积的具体方法不同,故可以在父类中放置一个抽象方法。
    • 所有父类和子类都放在shape包中
//抽象类的代码
package shape;
abstract class shape {
     
    shape(){
     }
    abstract public double getArea();
}
  • 每一个子类都需要建立自己的数据域,构造方法,和覆盖父类的求面积方法

  • 因为此题目仅需要求钢板的面积利用率,即只需要知道钢板面积即所有形状的面积和,故在此处不建立每一个子类实例对象,直接调用子类的方法递加求得所有形状的面积和。 实际上还是用new建立对象并调用这个方法,只是没有设置一个变量来指向这个建立的新实例对象。或者用类名来调用static方法,但此处getArea()在逻辑上需要继承父类中的abstract方法,abstract和static又冲突,此处不能这么做。

  • 因为程序需要具有较好的扩展性,例如增加一种形状三角形(类型符为D,记录三角形的三条边长)时,计算利用率的代码不会被修改。故在此题中**不直接涉及统计的所有形状的面积中有几个形状**,而是只求得面积,当新形状加入时,只需要修改计算面积的while循环,在if语句中添加一条新的判断方式,调用该新子类的getArea()方法以递加面积。

项目结构

包结构

SCAU Java-随堂实验6-银行账户类的定义与使用_第1张图片

Main类
package main;

import shape.*;

import java.util.Scanner;

public class Main {
     
    public static void main(String[] args) {
     
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入钢板的宽度和高度(格式为: xx xx)");
        double width = sc.nextInt();
        double height = sc.nextInt();
        double usingArea = 0.0;
        A steel = new A(width, height);//建立钢板对象,属于A类矩形对象

        System.out.println("请继续输入每一个形状的具体数据,具体形状对应格式如下");
        System.out.println("矩形: A 宽度 高度");
        System.out.println("圆形: B 半径");
        System.out.println("梯形: C 上底宽 下底宽 高度");
        System.out.println("当输入字母为'0'时代表输入结束,将退出数据录入");
        Character letter = sc.next().charAt(0);
        while (!letter.equals('0')) {
     
            if (letter.equals('A')) {
     
                double width01 = sc.nextDouble();
                double height01 = sc.nextDouble();
                usingArea += new A(width01,height01).getArea();
            } else if (letter.equals('B')) {
     
                double radius = sc.nextDouble();
                usingArea += new B(radius).getArea();
            } else if (letter.equals('C')) {
     
                double upWidth = sc.nextDouble();
                double downWidth = sc.nextDouble();
                double height01 = sc.nextDouble();
                usingArea += new C(upWidth,downWidth,height01).getArea();
            }
            System.out.println("请继续输入数据");
            letter = sc.next().charAt(0);
        }

        String rate = String.format("%.6f", usingArea/steel.getArea()*100) + "%";
        System.out.println("钢板利用率为" + rate);

    }
}
shape类
package shape;

abstract class shape {
     
    shape(){
     }
    abstract public double getArea();
}
A类
package shape;

public class A extends shape {
     
    //这是一个矩形类
    private double width;
    private double height;

    public A(double width,double height){
     
        this.width = width;
        this.height = height;
    }

    @Override
    public double getArea() {
     
        return height*width;
    }
}
B类
package shape;

public class B extends shape {
    //这是一个圆形类
    private double radius;

    public B(double radius){
        this.radius = radius;
    }

    @Override
    public double getArea() {
        return Math.PI*radius*radius;
    }
}
C类
package shape;

public class C extends shape{
    //这是一个梯形类
    private double upWidth;
    private double downWidth;
    private double height;

    public C(double upWidth, double downWidth, double height){
        this.upWidth = upWidth;
        this.downWidth = downWidth;
        this.height = height;
    }

    @Override
    public double getArea() {
        return (upWidth/2+downWidth/2)*height;
    }
}

你可能感兴趣的:(JAVA)