内容要求:

一、实验目的

(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个矩形。

代码示例如下:

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 Area(){//获取面积return this.width*this.height;}public double getPerimeter(){//获取周长return 2*(this.height+this.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;}
}
package shape;public class Utility {public static int compare(Rectangle rect1,Rectangle rect2){if(rect1.Area()>rect2.Area())return 1;else if(rect1.Area()==rect2.Area())return 0;else return -1;}/*功能:
如果rect1的面积比rect2的面积大,返回值为1
如果rect1的面积比rect2的面积小,返回值为-1
如果rect1的面积与rect2的面积相同,返回值为0*/public static void sort(Rectangle[] rectangles){for(int i=0;i<rectangles.length;i++)for(int j=i+1;j<rectangles.length;j++){if(rectangles[i].Area()<rectangles[j].Area()){Rectangle temp;temp=rectangles[i];rectangles[i]=rectangles[j];rectangles[j]=temp;}}}/*功能:
按照矩形的面积从大到小,对数组rectangles进行排序。*/public static Rectangle getMaxRectangle(Rectangle[] rectangles){double area=rectangles[0].Area();int arr=0;for(int i=1;i<rectangles.length;i++){if(rectangles[i].Area()>area){area=rectangles[i].Area();arr=i;}}System.out.printf("[%.2f,%.2f]-%.2f\n",rectangles[arr].getWidth(),rectangles[arr].getHeight(),area);return rectangles[arr];}/*功能:
在数组rectangles中找到并返回面积最大的矩形,如果有多个面积相同的最大矩形,返回数组中下标最小的矩形。*/public static void output(Rectangle[] rectangles){System.out.printf("共有X个矩形对象,颜色是:%s\n",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].Area());}}
}/*功能:
按下标顺序依次输出数组rectangles中的所有矩形。*/
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++){rectangles[i]=new Rectangle((double)(Math.random()*100),(double)(Math.random()*100));}//(1) 创建一个由10个矩形对象组成的数组,每个矩形的大小随机产生,颜色是默认值,矩形的宽度和高度的范围是[0,100)。Utility.output(rectangles);//(2) 输出这10个矩形;Utility.getMaxRectangle(rectangles);//(3) 输出面积最大的矩形,输出格式是:[宽, 高] – 面积,均保留2位小数。Utility.sort(rectangles);//(4) 对这10个矩形对象按面积进行降序排序;Rectangle.setColor("RED");//(5) 修改矩形的颜色为"RED";Utility.output(rectangles);//(6) 输出排序之后10个矩形。}
}

java实验:矩形类的定义与封装相关推荐

  1. Java实验实现一个circle类,java实验报告-类的定义.doc

    java实验报告-类的定义 南京理工大学泰州科技学院 实验报告书 课程名称: <JAVA面向对象程序设计> 实验题目: 实验三 类的定义 班 级: 09计算机(2) 学 号: 090903 ...

  2. Java(实验三)类与对象-定义并实现一个长方体类(Cube),包含长(length)、宽(width)与高(height)等三个属性

    一.实验目的: 1.学会定义并实现类. 2.学会定义并创建类的对象,通过类的对象访问类的成员属性与方法. 3.学会定义并实现派生类,学会使用派生类的对象. 4.理解并学会使用类的多态性. 二.实验环境 ...

  3. java定义矩形类rect_Java定义矩形类

    矩形类package cn.edu.uibe.oop; public class Rectangle { float width,height; /** * 计算面积 * @return 矩形的面积 ...

  4. java实验33 类的继承2_java实验2 类的继承性

    实验2 类的继承性 一.实验目的 掌握面向对象的继承性在Java中的实现方法:掌握super关键字的用法,体会抽象类和抽象方法的作用. 二.实验内容 1.程序理解: 1)类的继承 2)第4章课后编程第 ...

  5. java实验二 类和对象

    类和对象 [实验目的] 1. 掌握如何定义类. 2. 掌握如何定义类的成员变量.成员方法. 3. 掌握如何创建对象.使用对象. 4. 掌握关键字static的用法. 5. 掌握类成员的访问权限. [实 ...

  6. 【Python】经典问题创建一个矩形类,定义方法 属性 初始化

    Hello,大家好,我是乔乔白术!今天还是处理一些我们的习题. # 定义一个矩形类Rectangle: #a. 定义三个方法:get_area()求面积.get_per()求周长,show_all() ...

  7. java描述空间直线_java实验作业类的定义与描述

    1 //1三角形的定义与描述 2 packagetest;3 4 public classsjx {5 private doublea,b,c;6 7 public sjx(double a, dou ...

  8. Java程序(类的抽象与封装)

    package clearlove; public class yuan {//定义构造函数      private double Radius;//成员变量    public double ci ...

  9. java设计person类_定义一个Person类,含姓名、性别、年龄等字段;继承Person类设计...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package test2; public class Person { int age; String name; String gender; pub ...

  10. java数组使用实验报告_JAVA数组与类的定义-java实验报告

    JAVA数组与类的定义-java实验报告 JAVA数组与类的定义-java实验报告 .实验目的与要求 1. 熟悉Java类.对象和方法的一般操作练习等. 2. 熟悉数组等的定义和使用. 二.实验内容及 ...

最新文章

  1. redhat5.5安装oracle10g出现问题
  2. 荣耀com.huawei.android,荣耀阅读(com.huawei.hnreader) - 8.1.0.309 - 应用 - 酷安
  3. LinkedHashMap分析
  4. [摘]一张图 , oracle merge用法:
  5. win101909要不要更新_win10更新好还是不更新_win10更新有什么用
  6. Log and display Log text type in Account Overview page
  7. linux内核启动失败,裁剪后montavistalinux内核 nfs启动失败
  8. ruby 数据sql操作
  9. python能做什么软件-一篇告诉你为什么人人都应该学点Python?
  10. 最积阴德的4件事,哪怕做过一件,也会累积大功德!
  11. 机器学习实战 - 读书笔记(05) - Logistic回归
  12. 用程序C语言设计名片,C语言程序设计求职简历模板
  13. 箱形图适用于哪种数据_数据可视化分析中图表选择
  14. CSS进阶 如何实现圆形半圆
  15. 二、伊森商城 环境 虚拟机配置 p3
  16. Linux 下配置JDK 并运行springboot项目进行访问 Tomcat的安装
  17. 中科院大牛博士是如何进行文献检索和阅读(好习惯受益终生)
  18. libvirt零知识学习3 —— libvirt源码编译安装(1)
  19. GitHubActions详解
  20. 基于Leaflet的leaflet-sidebar侧边栏组件集成

热门文章

  1. PTA-学生成绩录入及查询 zym广东外语外贸大学
  2. python 基于卡方值分箱算法
  3. freenom 申请免费域名
  4. swift 中使用 Alamofire+Moya+ObjectMapper,并做了一些功能封装
  5. 网易云豆瓣数据分析——爬虫(结尾附代码
  6. FPGA之旅设计99例之第九例-----驱动0.96寸OLED屏
  7. MIMO信道容量仿真MATLAB,mimo系统的信道容量分析及matlab仿真.doc
  8. ubuntu开机桌面不显示
  9. 【spark2】【源码学习】【环境编译】在idea导入spark源码,执行example并debug
  10. 彻底搞懂vertical-align 底线、基线、中线的含义