import java.util.Comparator;

/**
* 定义一个Rectangle类,该类提供getLength和getWidth方法。利用图1-18中的findMax例程编写
* 一种main方法,该方法创建一个Rectangle数组并首先找出依面积最大的Rectangle对象,然后
* 找出依周长最大的Rectangle对象。
* @author wulei
*/
public class RectangleTest {
/**
* 构造一个矩形
*/
private int width,height;
private String name;

public RectangleTest(int width, int height){
this.width = width;
this.height = height;
}

public int getLength(){
return (width+height)<<2;
}

public int getArea(){
return width*height;
}

public String getName(){
return "("+width+","+height+")";
}

public static <T> T findMax(T[] arr,Comparator<? super T> cmp){
if(null == arr || cmp == null){
return null;
}
int index = 0;
for (int i = 1; i < arr.length; i++) {
if(cmp.compare(arr[i], arr[index]) > 0){
index = i;
}
}
return arr[index];
}

/**
* 长度比较器
*/
public static class LengthCompare implements Comparator<RectangleTest>{

@Override
public int compare(RectangleTest o1, RectangleTest o2) {
if(o1.getLength() > o2.getLength()){return 1;}
else if (o1.getLength() == o2.getLength()) {
return 0;
}else{
return -1;
}
}

}

/**
* 面积比较器
*/
public static class AreaCompare implements Comparator<RectangleTest>{

@Override
public int compare(RectangleTest o1, RectangleTest o2) {
if(o1.getArea() > o2.getArea()) {return 1;}
else if (o1.getArea() == o2.getArea()) {
return 0;
}
else {
return -1;
}
}

}

public static void main(String[] args) {
RectangleTest[] arr = new RectangleTest[]
{new RectangleTest(5, 5),new RectangleTest(6,4),new RectangleTest(3, 8)};
System.out.println(findMax(arr, new LengthCompare()).getName());
System.out.println(findMax(arr, new AreaCompare()).getName());
}

}

定义一个Rectangle类,该类提供getLength和getWidth方法。的更多相关文章

  1. 实验四 (1):定义一个形状类(Shape)方法:计算周长,计算面积

    (1)定义一个形状类(Shape)方法:计算周长,计算面积子类:矩形类(Rectangle) :额外的方法:differ() 计算长宽差圆形类(Circle)三角形类(Triangle)正方形类(Sq ...

  2. java定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积

    需求如下:(1)定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积. (2)定义一个类PassObject,在类中定义一个方法pri ...

  3. 定义一个Person类,其中包括:1.定义属性:姓名、年龄、民族作为成员变量。定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化。3.定义多个方法:分别显示相应的属性值,例如getName(){System.out.print("名称="+name+";"); }4.定义一个方法“成长”:实现年龄的增加,每执行一次年龄增加1

    题目显示不全,完整题目描述: (1)定义一个Person类,其中包括:1.定义属性:姓名:年龄:民族作为成员变量.定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化.3.定义多个方法:分别显 ...

  4. Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。

    返回本章节 返回作业目录 需求说明: 定义一个计算器类, 实现计算器类中加. 减. 乘. 除的运算方法, 每个方法能够接收2个参数. 实现思路: 定义计算器类. 定义计算器类中加.减.乘.除的方法. ...

  5. 34 异常机制 异常体系结构 Java把异常当做对象来处理 并定义一个基类java.lang.Throwable作为所有异常的超类 Error Exception

    异常体系结构 概念 Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类. 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Erro ...

  6. 定义一个接口CanFly,描述会飞的方法public void fly();

    1.使用类与接口的知识完成如下要求:(1)定义一个接口CanFly,描述会飞的方法public void fly();(2)分别定义类飞机和鸟,实现CanFly接口.(3)定义一个测试类,测试飞机和鸟 ...

  7. 实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法

    实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法 #import <Found ...

  8. C++:如何正确的定义一个接口类

    C++中如何定义接口类?首先给接口类下了定义:接口类应该是只提供方法声明,而自身不提供方法定义的抽象类.接口类自身不能实例化,接口类的方法定义/实现只能由接口类的子类来完成. 而对于C++,其接口类一 ...

  9. 用Java开发一个工具类,提供似于js中eval函数功能的eval方法

    今天在看到<Java疯狂讲义>中一个章节习题: 开发一个工具类,该工具类提供一个eval()方法,实现JavaScript中eval()函数的功能--可以动态运行一行或多行程序代码.例如: ...

随机推荐

  1. [No0000176]Git常用命令速查表(收藏大全)

    名词 master: 默认开发分支 origin: 默认远程版本库 Index / Stage:暂存区 Workspace:工作区 Repository:仓库区(或本地仓库) Remote:远程仓库 ...

  2. [No0000F1]js获取喜马拉雅和荔枝FM电台专辑音频

    荔枝FM小书签.txt javascript: (function() { if ($('#down_url')) { $('#down_url').remove(); }; $(document.b ...

  3. tensorflow 添加一个全连接层

    对于一个全连接层,tensorflow都为我们封装好了. 使用:tf.layers.dense() tf.layers.dense( inputs, units, activation=None, u ...

  4. bilibili的直播第三方IJKMediaFramework.framework下载打包使用教程

    参考和引用的地址: http://www.code4app.com/thread-8941-1-1.html http://blog.csdn.net/cccallen/article/details ...

  5. linux添加新硬盘

    1.添加新磁盘 2.fdisk -l查看磁盘被识别的名称 3.如果输入fdisk -l命令没有找到新的磁盘,按下面步骤操作 1)进入到cd /sys/class/scsi_host/ 2)echo & ...

  6. 转:Mysql float类型where 语句判断相等问题

    原文地址:https://www.2cto.com/database/201111/111983.html 原文内容如下: Mysql where 语句中有float 类型数据判断相等时,检索不出记录 ...

  7. LeetCode 876 Middle of the Linked List 解题报告

    题目要求 Given a non-empty, singly linked list with head node head, return a middle node of linked list. ...

  8. 如何在Win10上永久禁用Windows Defender Antivirus

    1.使用Windows键+ R键盘快捷键打开运行命令. 2.键入regedit,然后单击确定以打开注册表. 3.浏览以下路径: HKEY_LOCAL_MACHINE/SOFTWARE/Policies ...

  9. 洛谷P3245 大数 [HNOI2016] 莫队

    正解:莫队 解题报告: 传送门 这题首先要发现一个结论,是这样儿的: 若p不是10的约数(即2和5) 时,当第i位到第n位组成的数%p==第j位到第n位组成的数%p,那么第i位到第j位上的数组成的数% ...

  10. 封装 vue 组件的过程

    首先,组件可以提升整个项目的开发效率.能够把页面抽象成多个相对独立的模块,解决了我们传统项目开发的缺点:效率低,难维护,复用性等问题: 然后,使用Vue.extend方法创建一个组件,然后使用 Vue ...