SCAU 圆环类的数据封装及使用

圆环类的数据封装及使用

内容要求:

一、实验目的

(1)理解和掌握可见性修饰符,使用访问器和修改器对数据域进行封装。

(2)理解和掌握对象作为方法的参数和返回值。

二、实验内容

随堂实验1中的程序能够正常运行了,但是其中的Ring类的定义不是一个好的形式,因为它允许直接对过对象引用访问和修改圆环类的数据域,这样做使类难于维护并且不易调试。

本实验首先通过访问修饰符对其的数据域和方法进行修饰,使其成为一个结构更好的类。

步骤1:
目前Ring类中包含3个数据域、2个构造方法和相应的计算方法。
在该类的基础上定义一个新圆环类GoodRing,文件名命名为:GoodRing.java。
回答下面的问题,并按照问题答案重新编写、编译GoodRing类。
(1)构造方法名应该改为什么?用哪个可见性修饰符修饰构造方法比较合理?
(2)3个数据域应该用哪个可见性修饰符修饰?编写对应的访问器和修改器并使用恰当的访问性修饰符。
(3)计算方法应该用哪个可见性修饰符修饰比较合理?

步骤2:
参照TestRing.java编写GoodRing类的测试类程序TestGoodRing.java,编译并运行。
main方法中完成如下工作:
(1)创建一个GoodRing类的对象。
(2)输出该对象的半径、颜色、面积和周长。
(3)修改该对象的半径,重新输出半径、颜色、面积和周长。
编译并运行。

步骤3:

编写一个GoodRingUtil类,其中按下面要求定义static方法:

(1) createGoodRings方法,

形式参数为int,表示创建GoodRing类对象的个数;

返回值为 GoodRing[],存放生成的多个GoodRing类对象;

随机生成各个GoodRing对象的内外半径。

(2) totalArea方法,

形式参数为 GoodRing[],表示传入的数组;

返回值为double, 表示数组中所有GoodRing对象的面积之和。

(3) sort方法,

形式参数为 GoodRing[],表示传入的数组;

返回值为void

将数组中的GoodRing对象按面积从大到小排序。

(4) outputGoodRings方法,

形式参数为 GoodRing[],表示传入的数组;

返回值为void

输出数组中所有的GoodRing对象,包括内外半径、颜色和面积。每行输出一个GoodRing对象。

步骤4:

main方法中添加代码,调用GoodRingUtil类中的static方法完成如下工作:

(1)从键盘输入要创建的GoodRing对象的个数n;
(2)创建n个GoodRing对象的数组;
(3)输出n个GoodRing对象的面积之和;

(4)输出所有GoodRing对象;

(5)对数组进行排序;

(6)输出所有GoodRing对象;

编译并运行。

提交:打包为可以执行的JAR文档,其中要包含源程序文件。

总结:
在创建类的数组的时候,需要对每一个类再进行分配空间,否则程序会报错。
GoodRing[] Ring = new GoodRing[num];
Ring[i] = new GoodRing();

Main类:

package com.company;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        GoodRing ring = new GoodRing(5, 8 ,"RED");
        System.out.println("内圆半径:" + ring.getInnerRadius());
        System.out.println("外圆半径" + ring.getOuerRadius());
        System.out.println("填充颜色" + ring.getFillColor());
        System.out.println("环的面积" + ring.getArea());
        System.out.println("环的周长" + ring.getPerimeter());
        System.out.println();
        ring.setInnerRadius(6);
        ring.setOuterRadius(10);
        ring.setFillColor("BLACK");
        System.out.println("内圆半径:" + ring.getInnerRadius());
        System.out.println("外圆半径" + ring.getOuerRadius());
        System.out.println("填充颜色" + ring.getFillColor());
        System.out.println("环的面积" + ring.getArea());
        System.out.println("环的周长" + ring.getPerimeter());

        System.out.printf("请输入要创建圆的个数:");
        int n;
        Scanner cin = new Scanner(System.in);
        n = cin.nextInt();


        GoodRingUtil Ring = new GoodRingUtil();
        GoodRing[] ring2 = Ring.createGoodRings(n);
        double t = Ring.totalArea(ring2);
        System.out.println(t);
        Ring.outputGoodRings(ring2);
        Ring.sort(ring2);
        System.out.println("排序后:");
        Ring.outputGoodRings(ring2);
    }
}

GoodRing类:

package com.company;

public class GoodRing {
    private double innerRadius;
    private double outerRadius;
    private String fillColor;


    GoodRing(double innerRadius, double outerRadius, String fillColor){
        this.innerRadius = innerRadius;
        this.outerRadius = outerRadius;
        this.fillColor = fillColor;
    }

    GoodRing(){
    }

    double getArea(){
        return (outerRadius * outerRadius - innerRadius * innerRadius)*Math.PI;
    }

    double getPerimeter(){
        return (2.0 * outerRadius * Math.PI + 2.0 * innerRadius * Math.PI);
    }


    public void setInnerRadius(double innerRadius){
        this.innerRadius = innerRadius;
    }

    public void setOuterRadius(double outerRadius){
        this.outerRadius = outerRadius;
    }

    public void setFillColor(String fillColor){
        this.fillColor = fillColor;
    }

    public double getInnerRadius(){
        return innerRadius;
    }

    public double getOuerRadius(){
        return outerRadius;
    }

    public String getFillColor (){
        return fillColor;
    }
}


GoddRingUtil类:

package com.company;

public class GoodRingUtil {
    public GoodRing[] createGoodRings(int num){
          GoodRing[] Ring = new GoodRing[num];
          for(int i=0;i<num;i++){
              Ring[i] = new GoodRing();
              double i1,i2;
              i1 =Math.random()*10;
              i2 =Math.random()*10;
              if(i1<i2)
              {Ring[i].setInnerRadius(i1);
              Ring[i].setOuterRadius(i2);}
              else
              {
                  Ring[i].setInnerRadius(i2);
                  Ring[i].setOuterRadius(i1);
              }
          }
          return Ring;
    }

    public double totalArea(GoodRing[] Ring){
        double TotalArea = 0;
        for(int i=0 ;i<Ring.length;i++){
            TotalArea += Ring[i].getArea();
        }
        return TotalArea;
    }

    public void sort (GoodRing[] Ring){
        for(int i=1;i<Ring.length;i++)
            for (int j=0;j<Ring.length-1;j++){
            if(Ring[j].getArea()<Ring[j+1].getArea()){
                double t1;
                double t2;
                t1 = Ring[j].getInnerRadius();
                t2 = Ring[j].getOuerRadius();
                Ring[j].setOuterRadius(Ring[j+1].getOuerRadius());
                Ring[j].setInnerRadius(Ring[j+1].getInnerRadius());
                Ring[j+1].setInnerRadius(t1);
                Ring[j+1].setOuterRadius(t2);
            }
            }
    }

    public void outputGoodRings(GoodRing[] Ring){
        for (int i=0 ;i<Ring.length;i++)
        System.out.println("内径:"+Ring[i].getInnerRadius()+"外径:"+Ring[i].getOuerRadius()+" AREA:"+Ring[i].getArea());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值