zoukankan      html  css  js  c++  java
  • 第一章课后习题1.15

    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());
        }
    
    }
  • 相关阅读:
    AC日记——[HNOI2008]GT考试 bzoj 1009
    AC日记——[SCOI2009]游戏 bzoj 1025
    AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203
    AC日记——旅游 bzoj 2157
    NOIP模拟2017.6.11解题报告
    AC日记——【模板】Link Cut Tree 洛谷 P3690
    AC日记——[SDOI2010]大陆争霸 洛谷 P3690
    [NOI2010]超级钢琴 倍增
    [HNOI2004]L语言 字典树 记忆化搜索
    对拍
  • 原文地址:https://www.cnblogs.com/code-future/p/11429619.html
Copyright © 2011-2022 走看看