CS 100: Lecture L10
February 25
Boolean-valued methods via the Class Interval:
public class Interval { // An instance of this class is a particular interval [L,R]. // That is, the set of all real numbers x that satisfy L<=x<=R. private double L; // The left endpoint. private double R; // The right endpoint. (L<=R) // Constructor that creates an interval defined by all points // between and including a and b. public Interval(double a, double b) { if (a<=b) { L = a; R = b; } else { L = b; R = a; } } // Yields true if this interval contains x. public boolean contains(double x) { boolean B1 = L<=x; boolean B2 = x<=R; return B1 && B2; } // Yields true if this interval and q have at least one point in common. public boolean intersect(Interval q) { boolean B1 = R < q.L; boolean B2 = L > q.R; return !(B1 || B2); } // Yields true if every point in q is in this interval. public boolean contains(Interval q) { boolean B1 = L<=q.L; boolean B2 = R>=q.R; return B1 && B2; } // Yields true if every point in q is in this interval or if every point in // this interval is in q. public boolean nestable(Interval q) { boolean B1 = this.contains(q); boolean B2 = q.contains(this); return B1 || B2; } // Yields an interval whose endpoints are randomly selected from the interval q public static Interval random(Interval q) { double d = q.R-q.L; double a = q.L + Math.random()*d; double b = q.L + Math.random()*d; Interval I = new Interval(a,b); return I; } // Pretty prints this interval public void println() { Format.print(System.out,"[%4.2f,",L); Format.println(System.out,"%4.2f]",R); } }
Examples that show how to use the methods in the class Interval:
// import java.io.*; public class ShowInterval { public static void main(String args[]) { TokenReader in = new TokenReader(System.in); Interval I1 = new Interval(1,5); System.out.print("I1: "); I1.println(); Interval I2 = new Interval(4,7); System.out.print("I2: "); I2.println(); Interval I3 = new Interval(2,3); System.out.print("I3: "); I3.println(); System.out.println(" "); // Illustrate the method contains with a double actual parameter. if (I1.contains(2.0)) {System.out.println("I1 contains " + 2.0 );} else {System.out.println("I1 does not contain " + 2.0 );} if (I2.contains(2)) {System.out.println("I2 contains " + 2.0 );} else {System.out.println("I2 does not contain " + 2.0 );} // Illustrate the method intersect. if (I1.intersect(I2)) {System.out.println("I1 intersects I2");} else {System.out.println("I1 does not intersect I2");} if (I2.intersect(I3)) {System.out.println("I2 intersects I3");} else {System.out.println("I2 does not intersect I3");} // Illustrate the method contains with an Interval actual parameter.. if (I1.contains(I2)) {System.out.println("I1 contains I2");} else {System.out.println("I1 does not contain I2");} if (I1.contains(I3)) {System.out.println("I1 contains I3");} else {System.out.println("I1 does not contain I3");} // Illustrate the method nestable. if (I2.nestable(I1)) {System.out.println("I1 and I2 are nestable");} else {System.out.println("I1 and I2 are not nestable");} if (I1.nestable(I3)) {System.out.println("I1 and I3 are nestable");} else {System.out.println("I1 and I3 are not nestable");} if (I3.nestable(I1)) {System.out.println("I3 and I1 are nestable");} else {System.out.println("I3 and I1 are not nestable");} // Illustrate the method random by estimating the probability that // two randomly generated intervals chosen from [0,10] intersect. Interval J1,J2; Interval I = new Interval(0,10); int count = 0; for(int k=1;k<=1000;k++) { J1 = Interval.random(I); J2 = Interval.random(I); if (J1.nestable(J2)) {count++;} } System.out.println("\nProbability estimate = " + (double)count/1000); in.waitUntilEnter(); } }