矩形类的应用

目内容

实验4-2 矩形类的定义与封装

一、实验目的

(1)理解对象和类,掌握用类创建对象模型。

(2)理解和掌握数据域封装,可见性修饰符的使用

(3)学习如何定义类和创建对象,理解对象引用变量的概念。

(4)理解构造方法的作用,并使用构造方法创建类的对象。

(5)初步了解UML类图

二、实验内容

按照如下步骤完成实验:

第1步,编写一个名为Rectangle的类表示矩形,类放在shape包中。类的编写请按照下图所示的类图。

本题目中,假设所有的矩形对象的颜色是一致的,因此颜色使用静态成员。静态数据域color的默认值是 "BLACK";方法getArea和getPerimeter分别计算矩形的面积和周长。

类图的简要解释说明:

上面是使用类图描述类的结构,类图是包含自上到下3个部分的矩形。最上面是“类名”,第2部分是“数据域”,第3部分是构造方法和方法。

数据域和方法前面的符号表示可见性修饰符。+ 表示 public , - 表示 private.

有下划线的数据域和方法是静态数据域和静态方法,使用static修饰。

第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 Rectangle getMaxRectangle(Rectangle[] rectangles)

功能:

在数组rectangles中找到并返回面积最大的矩形,如果有多个面积相同的最大矩形,返回数组中下标最小的矩形。

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

功能:

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

第一行输出:共有X个矩形对象,颜色是:XXXXX

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

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

(1) 创建一个由10个矩形对象组成的数组,每个矩形的大小随机产生,颜色是默认值,矩形的宽度和高度的范围是[0,100)。

(2) 输出这10个矩形;

(3) 输出面积最大的矩形,输出格式是:[宽, 高] – 面积,均保留2位小数。

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

(5) 修改矩形的颜色为"RED";

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

代码如下:

Main包

main类:

package main;
import shape.Rectangle;
import shape.Utility;

public class Main {
	public static void main(String[] args) {
		Rectangle[] rectangles=new Rectangle[10];	
		for(int i=0;i<10;i++) {
			double w=Math.random()*100;
			double h=Math.random()*100;
			rectangles[i]=new Rectangle(w,h);
			
		}
		Utility.output(rectangles);
		Rectangle r=new Rectangle();
		r=Utility.getMaxRectangle(rectangles);
		System.out.println("最大面积矩形为:");
		System.out.printf("[%.2f,%.2f]-%.2f\n", r.getWidth(),r.getHeight(),r.getArea());
		
		Utility.sort(rectangles);
		Rectangle.setColor("RED");
		System.out.println("降序排序为:");
		Utility.output(rectangles);
				
		 
	}
 
}

shape包

Rectangle类:

package shape;
 
public class Rectangle {
	private double width;
	private double height;
	private static String color="BLACK";
	
	public Rectangle() {
		
	}
	
	public Rectangle(double width,double height) {
		this.width=width;
		this.height=height;
	}
	
	public double getArea() {
		return height*width;
	}
	
	public double getPerimeter() {
		return 2*(height+width);
	}
	
	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 static String getColor() {
		return color;
	}
	public static void setColor(String color) {
		Rectangle.color=color;
 
	}
	
 
	
 
}

Utility类:

package shape;
 
public class Utility {
	public static int compare(Rectangle rect1, Rectangle rect2) {
		if(rect1.getArea()>rect2.getArea())
			return 1;
		else if(rect1.getArea()==rect2.getArea())
			return 0;
		else if(rect1.getArea()<rect2.getArea())
			return -1;
		return 0;
	}
	
	public static void sort(Rectangle[] rectangles) {
		Rectangle temp;;
		for(int i=0;i<rectangles.length;i++){
			for(int j=0;j<rectangles.length-i-1;j++) {
				if(rectangles[j].getArea()<rectangles[j+1].getArea()) {
					temp=rectangles[j];
					rectangles[j]=rectangles[j+1];
					rectangles[j+1]=temp;
					
				}
			}
		}
		
	}
	
	public static Rectangle getMaxRectangle(Rectangle[] rectangles) {
		double max=0.0;
		int index=rectangles.length-1;;
		for(int i=0;i<rectangles.length-1;i++) {
			if(max<rectangles[i].getArea()) {
				max=rectangles[i].getArea();
				index=i;
			}
			else if((max==rectangles[i].getArea())){
				if(index>i)
					index=i;
			}
		}
		return rectangles[index];
	}
	
	public static void output(Rectangle[] rectangles) {
		System.out.printf("共有%d个矩形对象,颜色是:%s\n", rectangles.length,Rectangle.getColor());
		for(int i=0;i<rectangles.length;i++) {
			System.out.printf("[%.2f,%.2f]-%.2f\n", rectangles[i].getWidth(),rectangles[i].getHeight(),rectangles[i].getArea());
			
		}
	}
	
 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值