第一章课后习题1.15

1.15 定义一个Rectangle类，该类提供getLength和getWidth方法。利用图1-18中的findMax例程编写

package com.algorithm.chapterone;

import java.util.Comparator;

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

public Rectangle(int length, int width) {
this.length = length;
this.width = width;
}

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

public int getPerimeter() {
return (length + width) * 2;
}

public static <T> T findMax(T[] arr, Comparator<? super T> cmp) {
int maxIndex = 0;
for (int i = 0; i < arr.length; i++) {
if (cmp.compare(arr[i], arr[maxIndex]) > 0) {
maxIndex = i;
}
}
return arr[maxIndex];
}
/**
* 周长比较器
* @author Gao·Rongzheng
*
*/
public static class PerimeterComparator implements Comparator<Rectangle> {

@Override
public int compare(Rectangle o1, Rectangle o2) {
// TODO Auto-generated method stub
if (o1.getPerimeter() > o2.getPerimeter()) {
return 1;
} else if (o1.getPerimeter() < o2.getPerimeter()) {
return -1;
} else {
return 0;
}
}
}

/**
* 面积比较器
* @author Gao·Rongzheng
*
*/
public static class AreaComparator implements Comparator<Rectangle> {

@Override
public int compare(Rectangle o1, Rectangle o2) {
// TODO Auto-generated method stub
if (o1.getArea() > o2.getArea()) {
return 1;
} else if (o1.getArea() < o2.getArea()) {
return -1;
} else {
return 0;
}
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
Rectangle[] rectangles = {new Rectangle(5, 6), new Rectangle(3, 8), new Rectangle(4, 4), new Rectangle(1, 9)};
System.out.println(findMax(rectangles, new PerimeterComparator()).getPerimeter());
System.out.println(findMax(rectangles, new AreaComparator()).getArea());
}

}

posted @ 2019-08-29 14:42  从入门到入坟  阅读(71)  评论(0编辑  收藏