Java实验9 矩形类的定义与封装

本文详细介绍了如何使用Java编程实现Rectangle类来表示矩形,并创建Utility类提供面积比较、排序和输出功能。通过实例展示了如何创建矩形数组并按面积降序操作,最终生成可执行的JAR文件。

题目类别: 实验



关键字: 对象、类、封装、构造方法、UML类图



内容要求:

第1步,编写一个名为Rectangle的类表示矩形,类的编写请按照下图所示的类图。本题目假设所有的矩形对象的颜色是相同的,因此颜色使用静态成员。类放在shape包中。
在这里插入图片描述
说明,在类图中,数据域和方法前面的符号:-表示private;+表示public。



第2步,编写一个名为Utility的类,放在shape包中。其中按如下要求定义如下3个static方法:

(1) public static int compare(Rectangle rect1, Rectangle rect2)

     功能:

     如果rect1的面积比rect2的面积大,返回值为1

     如果rect1的面积比rect2的面积小,返回值为-1

     如果rect1的面积与rect2的面积相同,返回值为0

(2) public static void sort(Rectangle[] rectangles)

     功能:

     按照矩形的面积从大到小,对数组rectangles进行排序。

(3) public static void output(Rectangle[] rectangles)

     功能:

     按下标顺序依次输出数组rectangles中的所有矩形。

     每行输出一个矩形,矩形的输出格式是:[宽, 高] – 面积,均保留2位小数。



第3步,编写一个名为Main的主类,放在main包中。在main方法中实现如下功能:

(1) 创建一个由10个矩形对象组成的数组,每个矩形的大小自行确定,颜色为“RED”。

(2) 输出这10个矩形;

(3) 对这10个矩形对象按面积进行降序;

(4) 输出排序之后10个矩形。



备注

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



实现代码:

Rectangle类

package shape;

/**
 * @author zg
 */
public class Rectangle {
    /**
     * 矩形的宽度
     */
    private double width;
    /**
     * 矩形的高度
     */
    private double height;
    /**
     * 矩形的颜色,颜色使用静态成员
     */
    private static String color="BLACK";
    
    /**
     * 无参构造
     */
    public Rectangle() {
        width=1;
        height=1;
    }

    /**
     * 有参构造
     * @param width     矩形的宽度
     * @param height    矩形的高度
     */
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    /**
     *
     * 访问器和修改器
     */
    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        Rectangle.color=color;
    }

    /**
     *
     * @return 矩形的面积
     */
    public double getArea(){
        return height*width;
    }

    /**
     *
     * @return 矩形的周长
     */
    public double getPerimeter(){
        return 2*(height+width);
    }

}



Utility类:

package shape;

import java.util.Arrays;

/**
 * @author zg
 */
public class Utility {

    /**
     *
     * @param rect1 矩形对象
     * @param rect2 矩形对象
     * @return  如果rect1的面积比rect2的面积大,返回值为1
     *          如果rect1的面积比rect2的面积小,返回值为-1
     *          如果rect1的面积与rect2的面积相同,返回值为0
     */
    public static int compare(Rectangle rect1, Rectangle rect2){
        if(rect1.getArea()>rect2.getArea()){
            return 1;
        }
        if(rect1.getArea()==rect2.getArea()) {
            return 0;
        }
        return  -1;
    }

    /**
     *
     * @param rectangles 矩形对象数组
     *  按照矩形的面积从大到小,对数组rectangles进行排序
     */
    public static void sort(Rectangle[] rectangles){
        Arrays.sort(rectangles, (o1, o2) -> Double.compare(o2.getArea(),o1.getArea()));
    }

    /**
     *
     * @param rectangles 矩形对象数组
     * 按下标顺序依次输出数组rectangles中的所有矩形
     * 每行输出一个矩形,矩形的输出格式是:[宽, 高] – 面积,均保留2位小数
     *
     */
    public static void output(Rectangle[] rectangles){
        for (Rectangle rectangle : rectangles) {
            System.out.printf("[%.2f,%.2f] - %.2f",rectangle.getWidth(),rectangle.getHeight(),
                    rectangle.getArea());
            System.out.println();
        }
    }
}



Main类:

package main;

import shape.Rectangle;
import shape.Utility;

import java.util.Random;

/**
 * @author zg
 */
public class Main {

    public static void main(String[] args) {
        Random random=new Random();
        Rectangle[] rectangles=new Rectangle[10];
        int tenRec = 10;
        //  创建一个由10个矩形对象组成的数组,每个矩形的大小自行确定,颜色为“RED”
        for(int i = 0; i< tenRec; i++){
            //  随机生成宽和高(1~101)
            rectangles[i]=new Rectangle(random.nextInt(100)+1,random.nextInt(100)+1);
            //颜色为“RED”。
            rectangles[i].setColor("RED");
        }
        //输出这10个矩形
        System.out.println("排序前,10个矩形的宽、高和面积:");
        Utility.output(rectangles);
        System.out.println();

        //对这10个矩形对象按面积进行降序
        Utility.sort(rectangles);

        //输出排序之后10个矩形
        System.out.println("排序后,10个矩形的宽、高和面积:");
        Utility.output(rectangles);
    }
}

运行main方法的输出(随机,作为效果展示):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值