SCAU Java-随堂实验3-圆环类的数据封装及使用

题目

步骤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对象;

编译并运行。

GoodRing类
package MorningPractice;

public class GoodRing {
    private double innerRadius; //都改为private修饰符以封装原数据
    private double outerRadius;
    private String fillColor;

    public GoodRing(double iRadius, double oRadius, String color) {  //修改为public修饰符
        innerRadius = iRadius;
        outerRadius = oRadius;
        fillColor = color;
    }

    public GoodRing(){ //修改为public修饰符
        innerRadius = 1;
        outerRadius = 2;
        fillColor = "WHITE";
    }

    //三个修改器,用public修饰
    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修饰
    public double getInnerRadius() {
        return innerRadius;
    }

    public double getOuterRadius() {
        return outerRadius;
    }

    public String getFillColor() {
        return fillColor;
    }

    //计算方法用public修饰,允许
    public double getArea() {
        return ( Math.pow(outerRadius, 2) - Math.pow(innerRadius, 2) ) * Math.PI;
    }

    public double getInnerCircumference(){
        return innerRadius * Math.PI * 2;
    }

    public double getOuterCircumference(){
        return outerRadius * Math.PI * 2;
    }
}
GoorRingUtil类
package MorningPractice;
import java.util.Random;

class GoodRingUtil {

    public static GoodRing[] createGoodRings(int num){
//        (1) createGoodRings方法,
//        形式参数为int,表示创建GoodRing类对象的个数;
//        返回值为 GoodRing[],存放生成的多个GoodRing类对象;
//        随机生成各个GoodRing对象的内外半径。
        GoodRing[] arrayOfGoodRing = new GoodRing[num];
        Random r = new Random(1);
        for(int count = 0; count < num; count++){
            arrayOfGoodRing[count] = new GoodRing();
            arrayOfGoodRing[count].setOuterRadius(r.nextInt(100));
            arrayOfGoodRing[count].setInnerRadius(r.nextInt((int)arrayOfGoodRing[count].getOuterRadius()));
        }
        return arrayOfGoodRing;
    }

    public static double totalArea(GoodRing[] arrayOfGoodRing){
//        (2) totalArea方法,
//        形式参数为 GoodRing[],表示传入的数组;
//        返回值为double, 表示数组中所有GoodRing对象的面积之和。
        double area = 0;
        for(int count = 0; count < arrayOfGoodRing.length; count++){
            area += arrayOfGoodRing[count].getArea();
        }
        return area;
    }

    public static void sort(GoodRing[] arrayOfGoodRing) {
//    (3) sort方法,
//    形式参数为 GoodRing[],表示传入的数组;
//    返回值为void
//    将数组中的GoodRing对象按面积从大到小排序。
        for (int i = 0; i < arrayOfGoodRing.length - 1; i++) {
            //依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
            for (int j = 0; j < arrayOfGoodRing.length - 1 - i; j++) {
                // 比较相邻的元素,如果前面的数小于后面的数,就交换
                if (arrayOfGoodRing[j].getArea() < arrayOfGoodRing[j + 1].getArea()) {
                    GoodRing temp = arrayOfGoodRing[j + 1];
                    arrayOfGoodRing[j + 1] = arrayOfGoodRing[j];
                    arrayOfGoodRing[j] = temp;
                }
            }
        }
    }

    public static void outputGoodRings(GoodRing[] arrayOfGoodRing){
//        (4) outputGoodRings方法,
//        形式参数为 GoodRing[],表示传入的数组;
//        返回值为void
//        输出数组中所有的GoodRing对象,包括内外半径、颜色和面积。每行输出一个GoodRing对象。
        for(int count = 0; count < arrayOfGoodRing.length; count++){
            System.out.println("输出第"+(count+1)+"个圆环的数据");
            System.out.println("内圆半径:" + arrayOfGoodRing[count].getInnerRadius());
            System.out.println("外圆半径:" + arrayOfGoodRing[count].getOuterRadius());
            System.out.println("填充颜色:" + arrayOfGoodRing[count].getFillColor());
            System.out.println("环的面积:" + arrayOfGoodRing[count].getArea());
            System.out.println("环的内圆周长:" + arrayOfGoodRing[count].getInnerCircumference());
            System.out.println("环的外圆周长:" + arrayOfGoodRing[count].getOuterCircumference());
            System.out.println();
        }
    }

}
Main类
package MorningPractice;

import java.util.Scanner;

public class main {
    public static void main(String[] args) {
//        main方法中添加代码,调用GoodRingUtil类中的static方法完成如下工作:
//        (1)从键盘输入要创建的GoodRing对象的个数n;
//        (2)创建n个GoodRing对象的数组;
//        (3)输出n个GoodRing对象的面积之和;
//        (4)输出所有GoodRing对象;
//        (5)对数组进行排序;
//        (6)输出所有GoodRing对象;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要创建的GoodRing对象的个数n");
        int numToCreate = sc.nextInt();

        //创建n个GoodRing对象的数组
        GoodRing[] Array = GoodRingUtil.createGoodRings(numToCreate);
        //输出n个GoodRing对象的面积之和
        System.out.println("所有圆环的总面积:"+GoodRingUtil.totalArea(Array));
        System.out.println();
        //输出所有GoodRing对象
        GoodRingUtil.outputGoodRings(Array);
        //对数组进行排序
        GoodRingUtil.sort(Array);
        //再次输出所有GoodRing对象
        System.out.printf("\n==>>输出排序后的结果<<==\n\n");
        GoodRingUtil.outputGoodRings(Array);
    }

}

TestGoodRing类
package MorningPractice;

public class TestGoodRing {
    public static void main(String[] args) {
//        (1)创建一个GoodRing类的对象。
//        (2)输出该对象的半径、颜色、面积和周长。
//        (3)修改该对象的半径,重新输出半径、颜色、面积和周长。

        GoodRing ring = new GoodRing();

        //第一次输出
        System.out.println("内圆半径:" + ring.getInnerRadius());
        System.out.println("外圆半径:" + ring.getOuterRadius());
        System.out.println("填充颜色:" + ring.getFillColor());
        System.out.println("环的面积:" + ring.getArea());
        System.out.println("环的内圆周长:" + ring.getInnerCircumference());
        System.out.println("环的外圆周长:" + ring.getOuterCircumference());

        //修改数据
        ring.setInnerRadius(2);
        ring.setOuterRadius(5);
        ring.setFillColor("YELLOW");

        //第二次输出
        System.out.println("内圆半径:" + ring.getInnerRadius());
        System.out.println("外圆半径:" + ring.getOuterRadius());
        System.out.println("填充颜色:" + ring.getFillColor());
        System.out.println("环的面积:" + ring.getArea());
        System.out.println("环的内圆周长:" + ring.getInnerCircumference());
        System.out.println("环的外圆周长:" + ring.getOuterCircumference());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值