/**
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;
}