习题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); } }
请登录之后再进行评论