1.15 定义一个Rectangle类,该类提供getLength和getWidth方法。利用图1-18中的findMax例程编写
一种main方法,该方法创建一个Rectangle数组并首先找出依面积最大的Rectangle对象,然后 找出依周长最大的Rectangle对象。
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()); } }