/** A class for executing binary searches through an array. */ public class BinarySearcher { /** Constructs a BinarySearcher. @param anArray a sorted array of integers */ public BinarySearcher(Appointment[] anArray) { a = anArray; } /** Finds a value in a sorted array, using the binary search algorithm. @param v the value to search @return the index at which the value occurs, or -1 if it does not occur in the array */@@ public int search(Appointment v) { int midp = 0; int low = 0; int high = a.length - 1; while (low <= high) { int mid = (low + high) / 2; midp = mid; int diff = a[mid].compareTo(v); if (diff == 0) // a[mid] == v return 0; else if (diff < 0) // a[mid] < v low = mid + 1; else high = mid - 1; } return midp + 1; }@@ private Appointment[] a; } public class AppointmentBook{ public AppointmentBook(){ } public AppointmentBook(Appointment[] an){ anArray = an; }@@ public String add(Appointment a){ BinarySearcher searcher = new BinarySearcher(anArray); int sea = searcher.search(a); if (sea == 0){ return "Error: Overlapping Appointments!"; } else{ Appointment[] an = new Appointment[anArray.length+2]; for(int n = 0; n < sea - 1; n++){ an[n] = anArray[n]; } for(int n = sea; n < anArray.length+1; n++){ an[n] = anArray[n - 1]; } an[sea - 1] = a; anArray = an; return "Appointment Added!"; }@@ }@@ public String print(){ for (int n = 0; n < anArray.length - 1; n++){ x = anArray[n]; return x.toString(); } return null; }@@ private Appointment x; private Appointment[] anArray; } import java.lang.Comparable; public class Appointment { public Appointment() { } public Appointment(String d, String de, double st, double et) { day = d; description = de; start = st; end = et; } public void setDay(String d) { day = d; } public String getDay() { return day; } public void setDescription(String de) { description = de; } public String getDescription() { return description; } public void setStart(int st) { start = st; } public double getStart() { return start; } public void setEnd(int et) { end = et; } public double getEnd() { return end; } public String toString() { return "Appointment[Day: " + day + " Description: " + description + " Start Time: " + start + " End Time: " + end + "]"; } public int compareTo(Appointment b) { String aday = this.getDay(); String bday = b.getDay(); if (aday.compareTo(bday) == 0) { double ast = this.getStart(); double ae = this.getEnd(); double bst = b.getStart(); double be = b.getEnd(); if (ast == bst) { return 0; } else if (ast < bst) { if (ae <= bst) { return 1; } else { return 0; } } else if (ast > be) { return -1; } else { return 0; } } else { return aday.compareTo(bday); } } private String day, description; private double start; private double end; }