Java实验7 圆环类的数据封装及使用

题目类别: 实验


关键字: 类、对象、封装


内容要求:

一、实验目的

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

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

二、实验内容

实验5 中的程序能够正常运行了,但是其中的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类

package ex01;

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

public class GoodRing {
    private double innerRadius; //内半径
    private double outerRadius; //外半径
    private String fillColor;   //填充颜色

    /**
     * 无参构造
     */
    public GoodRing() {
        innerRadius=1;
        outerRadius=2;
        fillColor="WHITE";
    }

    /**
     * 全参构造
     * @param innerRadius 内半径
     * @param outerRadius 外半径
     * @param fillColor 填充颜色
     */
    public GoodRing(double innerRadius, double outerRadius, String fillColor) {
        this.innerRadius = innerRadius;
        this.outerRadius = outerRadius;
        this.fillColor = fillColor;
    }

    /**
     *  编写对应的访问器和修改器
     */
    public double getInnerRadius() {
        return innerRadius;
    }

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

    public double getOuterRadius() {
        return outerRadius;
    }

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

    public String getFillColor() {
        return fillColor;
    }

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

    /**
     * @return 计算并返回环面积的方法
     */
    public double getArea(){
        return (outerRadius*outerRadius-innerRadius*innerRadius)*Math.PI;
    }

    /**
     * 计算环的内圆周长
     */
    public double getInnerPerimeter(){
        return 2*innerRadius*Math.PI;
    }

    /**
     * @return 计算环的外圆周长
     */
    public double getOuterPerimeter(){
        return 2*outerRadius*Math.PI;
    }
}




TestGoodRing类

package ex01;

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

public class TestGoodRing {
    public static void main(String[] args) {
        GoodRing ring = new GoodRing(5, 8, "RED");
        System.out.println("内半径:"+ring.getInnerRadius());
        System.out.println("外半径:"+ring.getOuterRadius());
        System.out.println("填充颜色:"+ring.getFillColor());
        System.out.println("环的面积:"+ring.getArea());
        System.out.println("环的内圆周长:"+ring.getInnerPerimeter());
        System.out.println("环的外圆周长:"+ring.getOuterPerimeter());
        System.out.println();   //分隔行

        //修改该对象的半径
        ring.setInnerRadius(3); //修改该对象的内圆半径
        ring.setOuterRadius(7); //修改该对象的外圆半径

        //重新输出半径、颜色、面积和周长
        System.out.println("内半径:"+ring.getInnerRadius());
        System.out.println("外半径:"+ring.getOuterRadius());
        System.out.println("填充颜色:"+ring.getFillColor());
        System.out.println("环的面积:"+ring.getArea());
        System.out.println("环的内圆周长:"+ring.getInnerPerimeter());
        System.out.println("环的外圆周长:"+ring.getOuterPerimeter());
    }
}



GoodRingUtil类

package ex01;

import java.util.Arrays;
import java.util.Random;

/**
 * @author Administrator
 */
public class GoodRingUtil {

    /**
     *
     * @param num 创建GoodRing类对象的个数
     * @return  GoodRing[],存放生成的多个GoodRing类对象
     */
    public static GoodRing[] createGoodRings(int num){
        GoodRing[] goodRings=new GoodRing[num];
        Random random=new Random();
        for(int i=0;i<num;i++){
            goodRings[i]=new GoodRing(random.nextInt(5)+1,
                    random.nextInt(5)+5,"RED");
        }
        return goodRings;
    }


    /**
     *
     * @param goodRings    GoodRing[],表示传入的数组
     * @return double 表示数组中所有GoodRing对象的面积之和
     */
    public static double totalArea(GoodRing[] goodRings){
        double ans=0;
        for(GoodRing ring:goodRings){
            ans+=ring.getArea();
        }
        return ans;
    }


    /**
     *
     * @param goodRings     GoodRing[],表示传入的数组
     *
     * 将数组中的GoodRing对象按面积从大到小排序
     */
    public static void sort(GoodRing[] goodRings){
        Arrays.sort(goodRings, (o1, o2) -> Double.compare(o2.getArea(), o1.getArea()));
    }


    /**
     *
     * @param goodRings  GoodRing[],表示传入的数组
     * 输出数组中所有的GoodRing对象,包括内外半径、颜色和面积。每行输出一个GoodRing对象
     */
    public static void outputGoodRings(GoodRing[] goodRings){
        for(GoodRing ring:goodRings){
            System.out.print("内半径:"+ring.getInnerRadius()+"   ");
            System.out.print("外半径:"+ring.getOuterRadius()+"   ");
            System.out.print("填充颜色:"+ring.getFillColor()+"   ");
            System.out.println("环的面积:"+ring.getArea());
        }
    }
}



Main类:

package ex01;

import java.util.Scanner;

/**
 * @author Administrator
 */
public class Main {
    public static void main(String[] args) {
        //  (1)从键盘输入要创建的GoodRing对象的个数n
        Scanner sc=new Scanner(System.in);
        System.out.print("输入要创建的GoodRing对象的个数n:");
        int n=sc.nextInt();
        sc.close();

        //  (2)创建n个GoodRing对象的数组
        GoodRing[] goodRings=GoodRingUtil.createGoodRings(n);
        System.out.println();

        //  (3)输出n个GoodRing对象的面积之和
        System.out.println(n+"个GoodRing对象的面积之和为:"+GoodRingUtil.totalArea(goodRings));
        System.out.println();

        //  (4)输出所有GoodRing对象
        System.out.println("所有GoodRing对象分别为:");
        GoodRingUtil.outputGoodRings(goodRings);
        System.out.println();

        //  (5)对数组进行排序
        GoodRingUtil.sort(goodRings);

        //  (6)输出所有GoodRing对象
        System.out.println("排序后,所有GoodRing对象分别为:");
        GoodRingUtil.outputGoodRings(goodRings);
    }
}



若有错误,欢迎大家指出 ^ _ ^

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值