Java入门第65课——根据周长计算不同形状图形的面积

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/houjunkang363/article/details/90726545

问题

        根据周长计算不同形状图形的面积,详细要求如下:

        1.计算多种图形的面积,并比较各种图形面积的最大值。

        2.使用抽象类及其子类的方式实现本案例

        3.本案例以圆形和正方形为例。

        注:正方形的面积公式为:0.0625*c*c。圆形的面积公式为:0.0796*c*c,其中,c表示图形的周长。

方案

        分析问题中的描述,可以得出如下解决方案:

        1.定义两个类Square和Circle,分别表示正方形和圆形。

        2.正方形和圆形都有周长,我们可以使用c属性来表示;要计算正方形和圆形的面积,我们定义area方法来实现。即,分别在Square类和Circle类中定义c属性和area方法,并根据各自图形的公式计算对应的面积。

        3.案例问题中要求计算各种图形的面积,并找出最大值。在此,我们需要找到一种类型,该类型为Square类和Circle类的父类,使用该类型的数组来存储所有图形。因此,定义Shape类,该类为Square和Circle类的父类,并将Square类和Circle类的共有属性放入Shape类中定义。

        4.又因为父类(Shape)的引用不能直接调用子类(Square和Circle)的方法(area方法),因此,将area方法抽取到父类Shape中。在父类Shape中,不知道具体是那种图形,因此area方法不知如何实现,在此,将该方法定义抽象方法,那么Shape类也要定义为抽象类。这样,也形成了(Square或Circle)重写父类(Shape)的area方法。

        5.最后,我们就可以定义如下方法来实现求面积的最大值:

    public static void maxArea(Shape[] shapes){
        Shape s0=shapes[0];
        double max=s0.area();
        int maxIndex=0;
        for(int i=1;i<shapes.length;i++){
            double area=shapes[i].area();
            if(area>max){
                max=area;
                maxIndex=1;
            }
        }
        System.out.println("数组中索引为"+maxIndex+"的图形的面积最大面积为:"+max);
    }

    以上方法中,参数shapes为Shape[]数组类型,该参数中可以存储正方形、圆形、或是其它图形。

步骤

        实现此案例需要按照如下步骤进行。

步骤一:定义类Square和Circle

        定义两个类Square和Circle,分别表示正方形和圆形,Square类代码如下所示:

public class Square{
    }

        Circle类代码如下所示;

public class Circle{
}

步骤二:定义c属性和area方法

        分别在Square类和Circle类中定义c属性和area方法,并根据各自图形的公式计算对应的面积,Square类代码如下所示:

    public class Square{
        private double c;
        public Square(double c){
            this.c=c;
        }
        /**
         *计算正方形的面积
         */
         public double area(){
             return 0.0625*c*c;
         }
    }

        Circle类代码如下所示:

    public class Circle{
        private double c;
        public Circle(double c){
            this.c=c;
        }
        /**
         *计算圆形的面积
         */
         public double area(){
             return 0.0796*c*c;
         }
    }

步骤三:定义父类Shape并抽取属性和方法

        定义父类Shape,将子类Square和Circle中共有属性c和方法area抽取到父类Shape中,并重构Square类和Circle类,Shape类代码如下所示:

 public abstract class Shape{
        protected double c;
        public abstract double area();
    }

        Square类代码如下所示:

    public class Square extends Shape{
        public Square(double c){
            this.c=c;
        }
        /**
         *计算正方形的面积
         */
         public double area(){
             return 0.0625*c*c;
         }
    }

        Circle类代码如下所示:

    public class Circle extends Shape{
        public Circle(double c){
            this.c=c;
        }
        /**
         *计算圆形的面积
         */
         public double area(){
             return 0.0796*c*c;
         }
    }

步骤四:计算各种圆形面积的最大值

        新建类TestShape,在该类中新建方法maxArea方法,该方法实现计算多种图形面积的最大值,代码如下所示:

    public class TestShape{
        public static void maxArea(Shape[] shapes){
            double max=shapes[0].area();
            int maxIndex=0;
            for(int i=1;i<shapes.length;i++){
                doublea area=shapes[i].area();
                if(area>max){
                    max=area;
                    maxIndex=i;
                }
            }
            System.out.println("数组中索引为"+maxIndex+"的图形的面积最大,面积为:"+max);
        }
    }

步骤五:测试

        在TestShape类中,测试maxArea方法能否计算出各种图形面积的最大值,代码如下所示:

    public class TestShape{
        public static void main(String[] args){
            Shape[] shapes=new Shape[2];
            shapes[0]=new Circle(4);数组中的第一个元素为圆形对象,周长为4
            shapes[1]=new Square(4);数组中第二个元素为正方形对象,周长为4
            maxArea(shapes);
        }
        
        public static void maxArea(Shape[] shapes){
            double max=shapes[0].area();
            int maxIndex=0;
            for(int i=1;i<shapes.length;i++){
                double area=shapes[i].area();
                if(area>max){
                    max=area;
                    maxIndex=i;
                }
            }
            System.out.println("数组中索引为"+maxIndex+"的图形的面积最大,面积为:"+max);     
        }
    }

步骤六:运行

        运行TestShape类,控制台输出结果如下所示:

    数组中索引为0的图形的面积最大,面积为:1.2736

        观察上述输出结果,可以看出,shapes[0]表示的是圆形,周长相同的情况下,圆形的面积更大些。

扫描关注我吧:

猜你喜欢

转载自blog.csdn.net/houjunkang363/article/details/90726545