//package PS2a; import javax.swing.*; public class ElevatorTest2 { public static void main(String[] args) { // Range of floors; must be same for both elevators String text= JOptionPane.showInputDialog("Enter highest floor: "); int maxFloor= Integer.parseInt(text); text= JOptionPane.showInputDialog("Enter lowest floor: "); int minFloor= Integer.parseInt(text); Elevator one= new Elevator(maxFloor, minFloor, "One"); Elevator two= new Elevator(maxFloor, minFloor, "Two"); Elevator three= new Elevator(maxFloor, minFloor, "Three"); // Master controller for both elevators Controller master= new Controller(one, two, three); while (true) { text= JOptionPane.showInputDialog("Enter floor to request elevator (-1 to quit)"); int elevatorRequest= Integer.parseInt(text); if (elevatorRequest == -1) break; else { master.request(elevatorRequest); } } // Statistics at end int numReq1= one.getStatistics(); int numReq2= two.getStatistics(); int numReq3= three.getStatistics(); master.getStatistics(numReq1, numReq2, numReq3); System.exit(0); } } class Elevator { private int curFloor; private int maxFloor; private int minFloor; private int numRequests=0; private int numFloorsMoved=0; private String name; public Elevator(int maxF, int minF, int curF, String n) { maxFloor= maxF; minFloor= minF; curFloor= curF; name= n; } public Elevator(int maxF, int minF, String n) { this(maxF, minF, minF, n); } public Elevator(int maxF, String n) { this(maxF, 1, 1, n); } public void request(int f) { if (f < minFloor || f > maxFloor || f == curFloor) ; // Do nothing else if (f < curFloor) { // Elevator must descend numRequests++; numFloorsMoved += (curFloor - f); System.out.println("At floor: " + curFloor); while (f < curFloor) { curFloor--; System.out.println(" Going down past floor: " + curFloor); } System.out.println("Stop at floor: " + f + "\n"); } else { // Elevator must ascend numRequests++; numFloorsMoved += (f - curFloor); System.out.println("At floor: " + curFloor); while (f > curFloor) { curFloor++; System.out.println(" Going up past floor: " + curFloor); } System.out.println("Stop at floor: " + f + "\n"); } } public int getCurrentFloor() { return curFloor; } public String getName() { return name; } public int getStatistics() { // Returns number of requests System.out.println("Elevator: " + name); System.out.println("Number of requests served: " + numRequests); System.out.println("Number of floors moved: " + numFloorsMoved); if (numRequests > 0) System.out.println("Avg floors/move: " + numFloorsMoved/(double)numRequests + "\n"); return numRequests; } } class Controller { private Elevator first; private Elevator second; private Elevator third; // private int maxFloor; // private int minFloor; Controller(Elevator a, Elevator b, Elevator c) { first= a; second= b; third= c; } public void request(int f) { int floor1= first.getCurrentFloor(); int floor2= second.getCurrentFloor(); int floor3= third.getCurrentFloor(); System.out.println("Elevator One floor: " + floor1); System.out.println("Elevator Two floor: " + floor2); System.out.println("Elevator Three floor: " + floor3); int d1 = Math.abs(f-floor1); int d2 = Math.abs(f-floor2); int d3 = Math.abs(f-floor3); int min = Math.min(d1, Math.min(d2, d3)); if (min == d1) { System.out.println("Chosen elevator: " + first.getName()); first.request(f); } else if (min == d2) { System.out.println("Chosen elevator: " + second.getName()); second.request(f); } else { System.out.println("Chosen elevator: " + third.getName()); third.request(f); } } public void getStatistics(int r1, int r2, int r3) { System.out.println("Total requests, all elevators: " + (r1+r2+r3)); } }