• 中文
    • English
  • 注册
  • 查看作者
  • 《算法第四版》课后练习题1.2.2答案

    习题1.2.2

    编写一个Interval1D的用例,从命令行接受一个整数 N。从标准输入中读取 N 个间隔(每个间隔由一对double值定义)并打印出所有相交的间隔对。

    要点分析

    关于Interval1d的API请查看课本第47页。

    注意:该类中的构造方法中的lo,和hi,需要满足以下条件:lo <= hi ,否则将会报错:

    Exception in thread "main" java.lang.IllegalArgumentException: Illegal interval at edu.princeton.cs.algs4.Interval1D.<init>(Interval1D.java:74)

    另外:draw()方法也无法使用,在该类中并没有实现该方法。

    参考答案

    import edu.princeton.cs.algs4.Interval1D;
    
    import java.util.Scanner;
    
    /**
     * @description: Interval1d用例
     * @author: ZhangJia
     * @create: 2018-08-02 15:15
     **/
    public class Two {
        /**
        * @description: 创建N个间隔
        * @param:  用于存储间隔对的数组
        * @return:  Nothing
        */
        public static void In_Interval1(Interval1D[] i) {
            Scanner input = new Scanner(System.in);
            for (int j = 0; j < i.length; j++) {
                System.out.println("请输入lo:");
                double lo = input.nextDouble();
                System.out.println("请输入hi:");
                double hi = input.nextDouble();
                i[j] = new Interval1D(lo,hi);
            }
        }
    
        /**
        * @description: 打印所有相交的间隔对
        * @param:  存储间隔对的数组
        * @return:
        */
    
        public static void print(Interval1D[] i) {
            for (int j = 0; j < i.length - 1; j++) {
                for (int k = j + 1; k < i.length; k++) {
                    if(i[j].intersects(i[k])) {
                        System.out.println(i[j].length());
                        System.out.println(i[k].length());
                    }
                }
            }
        }
        public static void main(String[] args) {
            int N = Integer.parseInt(args[0]);
            Interval1D[] i = new Interval1D[N];
            In_Interval1(i);
            print(i);
        }
    }

     

  • 0
  • 0
  • 0
  • 2.2k
  • 请登录之后再进行评论

    登录
    单栏布局 侧栏位置: