一、实验目的

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

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

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

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

二、实验内容

按照如下步骤完成实验:

步骤1:创建一个Java Project,命名为:exp05

步骤2:所有边长度都相同且所有角的度数都相同的多边形称为“正n边形”。

按下面要求定义一个类表示正n边形:

(1) 类名:RegularPolygon,放置在包exp05.shape中;

(2) 一个名为numberOfSides的int型私有数据域,表示多边形的边数,默认值为3;

(3) 一个名为lengthOfSide的double型私有数据域,表示多边形的边长,默认值为1.0;

(4) 一个名为x的double型私有数据域,表示多边形中心点的横坐标,默认值是0.0;

(5) 一个名为y的double型私有数据域,表示多边形中心点的纵坐标,默认值是0.0;

(6) 一个创建带默认值的正多边形对象的无参构造方法,,使用恰当的可见性修饰符修饰;

(7) 一个能创建指定边数和边长度、中心在(0,0)的正多边形对象的构造方法,,使用恰当的可见性修饰符修饰;

(8) 一个能创建指定边数和边长度、中心在(x,y)的正多边形对象的构造方法,,使用恰当的可见性修饰符修饰;

(9) 所有数据域的访问器和修改器;

(10)一个返回正多边形面积的方法:double getArea(),使用恰当的可见性修饰符修饰,面积公式如下:

其中,n是多边形的边数;s是多边形的边长。

(11)一个返回正多边形中心点到坐标原点距离的方法:double getDistance(),使用恰当的可见性修饰符修饰;

(12)覆盖toString方法,返回 “[边数, 边长]@(x,y)”形式的字符串;

(13)覆盖equals方法,当多边形对象的中心坐标、边数、边长均相同时,返回true,其他情况返回false;

(14)覆盖hashcode方法,要求:r1.equals(r2)返回为true时,r1.hashcode()与r2.hashcode()的返回值相同。

步骤3:定义一个主类Main,放置在包exp05.main中,在主类中完成以下工作:

(1) 从键盘输入需要创建的多边形对象的个数n;

(2) 依次输入每个多边形的:边数、边长度、中心坐标,并创建多边形对象;

(3) 输出所有的多边形对象,以 “[边数, 边长]@(x,y)”形式;

(4)以 “[边数, 边长]@(x,y)”形式输出面积最大的多边形及其面积;

(5)以 “[边数, 边长]@(x,y)”形式输出距离坐标原点最近的多边形及其距离。

分析:按照题目要求完成即可,唯一的难点是equals方法和hashcode方法的重写。这里简单介绍一下这两个方法,object类里定义了这两种方法,equals方法用于判断两个地址是否指向同一对象,是的话返回true,否则返回false。hashcode方法返回一个对象的哈希值,哈希值是通过不唯一的特殊算法计算出的一个对象的int整型值,哈希值用于哈希表的查找。并且equals和hashcode一般都要同时重写。具体参考视频【每天一个技术点】hashCode()到底有什么用,为啥一定要和equals()重写

代码片段如下:

package exp05.shape;//类表示正n边形
public class RegularPolygon {private int numberOfSides;private double lengthOfSide;private double x;private double y;//带默认值的无参构造方法public RegularPolygon() {this.numberOfSides=3;this.lengthOfSide=1.0;this.x=0.0;this.y=0.0;}//能创建指定边数和边长度、中心在(0,0)的正多边形对象的构造方法public RegularPolygon(int numberOfSides, double lengthOfSide) {this.numberOfSides = numberOfSides;this.lengthOfSide = lengthOfSide;this.x = 0.0;this.y = 0.0;}//能创建指定边数和边长度、中心在(x,y)的正多边形对象的构造方法public RegularPolygon(int numberOfSides, double lengthOfSide, double x, double y) {this.numberOfSides = numberOfSides;this.lengthOfSide = lengthOfSide;this.x = x;this.y = y;}//返回正多边形面积的方法public double getArea(){return numberOfSides*lengthOfSide*lengthOfSide/4*Math.tan(Math.PI/numberOfSides);}//返回正多边形中心点到坐标原点距离的方法public double getDistance(){return Math.sqrt(x*x+y*y);}//覆盖toString方法,返回 “[边数, 边长]@(x,y)”形式的字符串@Overridepublic String toString(){return "["+numberOfSides+", "+lengthOfSide+"]@("+x+","+y+")";}//覆盖equals方法,当多边形对象的中心坐标、边数、边长均相同时,返回true,其他情况返回false@Overridepublic boolean equals(Object O){if(O == null) return false;if(this.getClass()!= O.getClass()) return false;RegularPolygon r = (RegularPolygon) O;if(this.x!=r.x || this.y!=r.y||this.lengthOfSide!=r.lengthOfSide||this.numberOfSides!=r.numberOfSides)return false;return true;}//覆盖hashcode方法,要求:r1.equals(r2)返回为true时,r1.hashcode()与r2.hashcode()的返回值相同@Overridepublic int hashCode(){int result = hashCode();if(result == 0){result = 17;result = 31*result + (int)this.x;result = 31*result + (int)this.y;result = 31*result + (int)this.lengthOfSide;result = 31*result + this.numberOfSides;}return result;}//以下是所有数据域的访问器和修改器public int getNumberOfSides() {return numberOfSides;}public void setNumberOfSides(int numberOfSides) {this.numberOfSides = numberOfSides;}public double getLengthOfSide() {return lengthOfSide;}public void setLengthOfSide(double lengthOfSide) {this.lengthOfSide = lengthOfSide;}public double getX() {return x;}public void setX(double x) {this.x = x;}public double getY() {return y;}public void setY(double y) {this.y = y;}
}
package exp05.shape;import java.util.Scanner;//主类
public class Main {public static void main(String[] args) {//(1) 从键盘输入需要创建的多边形对象的个数n;int n;Scanner sc=new Scanner(System.in);n=sc.nextInt();//(2) 依次输入每个多边形的:边数、边长度、中心坐标,并创建多边形对象;RegularPolygon[] rp=new RegularPolygon[n];for(int i=0;i<n;i++){int numberOfSides;double lengthOfSide;double x;double y;numberOfSides=sc.nextInt();lengthOfSide=sc.nextDouble();x=sc.nextDouble();y=sc.nextDouble();rp[i]=new RegularPolygon(numberOfSides,lengthOfSide,x,y);}//(3) 输出所有的多边形对象,以 “[边数, 边长]@(x,y)”形式;System.out.println("所有的多边形对象如下");for(int i=0;i<n;i++){System.out.println(rp[i].toString());}//(4)以 “[边数, 边长]@(x,y)”形式输出面积最大的多边形及其面积;//(5)以 “[边数, 边长]@(x,y)”形式输出距离坐标原点最近的多边形及其距离int areaMax=0;int distanceMax=0;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(rp[i].getArea()<rp[j].getArea())areaMax=j;if(rp[i].getDistance()>rp[j].getDistance())distanceMax=j;}}System.out.println("\n面积最大的多边形为:");System.out.println(rp[areaMax].toString());System.out.printf("其面积为%.2f\n",rp[areaMax].getArea());System.out.println("\n距离坐标原点最近的多边形为:");System.out.println(rp[distanceMax].toString());System.out.printf("其距离为%.2f\n",rp[distanceMax].getArea());}}

java实验:正n多边形类的定义与使用相关推荐

  1. java实验:银行账户类的定义与使用

    内容要求: 一.实验目的 (1)理解对象和类,掌握用类创建对象模型. (2)理解和掌握抽象类的使用 (3)理解和掌握继承.方法覆盖的使用 (4)初步掌握使用多态性的方法 二.实验内容 按照如下步骤完成 ...

  2. java源程序是由类定义_无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件...

    无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件 答:× 小儿头皮静脉输液时如误注入动脉,局部表现为: 答:呈树枝状苍白 人民群众既是历史 ...

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

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

  4. Java实验实现一个circle类_Java实验报告四

    Java实验报告四 一.题目 1.根据下面的要求实现圆类Circle. 1).圆类Circle的成员变量:radius表示圆的半径. 2).圆类Circle的方法成员: Circle():构造方法,将 ...

  5. 中南林业科技大学Java实验报告六:类的特性

    实验6:类的特性 6.1 实验目的 掌握类的私有成员和共有成员的定义: 掌握类的私有成员的访问方法: 理解类的构造方法的作用和执行过程: 掌握类的构造方法的定义和关键词this的使用: 类的静态变量: ...

  6. java里创建一个长方形类_定义一个长方形类,定义 求周长和面积的方法实例

    /* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: impor ...

  7. JAVA实验3 学校教师类

    题目描述 学校有教师.实验员.行政人员,请编写员工这个基类并派生出教师.实验员和行政人员三个类.教师有基本工资(整型)和课酬标准(整型,元/小时):实验员有基本工资(整型)和每周在岗时间(整型):行政 ...

  8. java实验报告之Employee类的设计

    一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Time of completion:2022.12.20 La ...

  9. java实验2 对象、类、继承、包

    (1)声明位于包test.exam中Point类,有坐标x.y两个私有成员变量,有一个返回与其它点的距离的方法,还有一个移动点的方法 package com.qst.fuxi; public clas ...

最新文章

  1. java当中各种流的应用场景_Java中有哪些流,常用流有哪些并有何特点和使用场景 NIO流,特性及使用时注意的事项 IO与NIO区别...
  2. 浏览器差异总结,可以用此判断浏览器版本(转)
  3. python中实现多线程的几种方式
  4. 【BZOJ3531】旅行,树链剖分+开点线段树
  5. 【clickhouse】clickhouse 表引擎之 Merge
  6. C++基础教程之类与对象
  7. 【FICO】SAP中的银行
  8. 北风修仙笔记—2020年6月
  9. 看到这类代码,别再说你不认识了!手把手带你认识初阶结构体(结构体类型的声明、初始化、成员访问与传参,全在这篇文章里)
  10. 禁区——不要走入政府采购的“黑名单”
  11. VB6.0的MsgBox语句
  12. ROS学习笔记(2)——ROS通信机制
  13. LDIFDE试验全记录
  14. 彩色rgb图像拆分为rgb三个通道,并重新合并为彩色图像
  15. 个人项目记录 -- VChat
  16. 第十章、正则表达式和JSON
  17. 十一种通用滤波算法(转)
  18. Java 面试全解析:核心知识点与典型面试题
  19. unity 3d 中paint in 3d插件的简单使用
  20. Microsoft SQL Server 2005 整合、集成SP3方法

热门文章

  1. 现在流行的编程热潮是不是一个骗局?
  2. 腹肌练习能帮助燃烧腹部脂肪吗?看完再也没有疑惑了
  3. Echarts 实现动态地图
  4. js截取图片 裁剪图片之cropper.js插件用法详解
  5. 哈工大操作系统学习笔记十——信号量与死锁
  6. 谷歌浏览器打开标签会把之前的覆盖掉_Chrome浏览器切换到之前打开的标签页会重新加载...
  7. 上buff——状态模式
  8. linux ps查看完整时间,Linux ps 命令查看进程启动及运行时间
  9. iOS 逆向编程(三)实操越狱详细流程
  10. 问题—抱怨?人品差?别搞笑了!