内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
以下是我的代码:
package callcenter; import java.util.ArrayList; import java.util.Random; import java.util.Timer; import java.util.TimerTask; public class CallCenter extends TimerTask { ArrayList<Caller> Server1 = new ArrayList<>(); ArrayList<Caller> Server2 = new ArrayList<>(); ArrayList<Caller> Queue = new ArrayList<>(); Random rand = new Random(); int count = 7, count1 = 7, time = rand.nextInt(301) + 300; public static int firstattempt = 0; public static int queued1 = 0; public static int queued2 = 0; public static int attempt = 0; public static int callcounter = 0; public static int Processed = 0; public static void main(String[] args) { TimerTask task = new CallCenter(); Timer timer = new Timer(); timer.scheduleAtFixedRate(task,0,1000); } @Override public void run() { if ((Server1.isEmpty() == false) || (Server2.isEmpty() == false)){ ReceiveCall(); callcounter++; if (count > 0){ if(Server1.get(0).getServiceTime() > 1){ Server1.get(0).setServiceTime(); count--; } else{ count = 7; attempt = Server1.get(0).getAttempt(); Server1.remove(0); if(attempt == 1){ firstattempt++; } else if(attempt == 2){ queued1++; } else if(attempt == 3){ queued2++; } if(Queue.size() > 0){ Server1.add(Queue.get(0)); Queue.remove(0); Processed++; } } } else{ Server1.get(0).setAttempt(); Queue.add(Server1.get(0)); Server1.remove(0); if(Queue.size() > 0){ Server1.add(Queue.get(0)); Queue.remove(0); Processed++; } count = 7; } if (count1 > 0){ if(Server2.get(0).getServiceTime() > 1){ Server2.get(0).setServiceTime(); count1--; } else{ count1 = 7; attempt = Server2.get(0).getAttempt(); Server2.remove(0); if(attempt == 1){ firstattempt++; } else if(attempt == 2){ queued1++; } else if(attempt == 3){ queued2++; } if(Queue.size() > 0){ Server2.add(Queue.get(0)); Queue.remove(0); Processed++; } } } else{ Server2.get(0).setAttempt(); Queue.add(Server2.get(0)); Server2.remove(0); if(Queue.size() > 0){ Server2.add(Queue.get(0)); Queue.remove(0); Processed++; } count1 = 7; } } else if (Queue.size() > 0) { if(Server1.isEmpty() == false) { Server2.add(Queue.get(0)); Queue.remove(0); Processed++; } else{ Server1.add(Queue.get(0)); Queue.remove(0); Processed++; } } else { ReceiveCall(); callcounter++; } Format(); } public void ReceiveCall(){ int SAssign; Caller c = new Caller(); c.setCallerID(); c.setRandomTime(); c.setAttempt(); SAssign = rand.nextInt(2) + 1; if (SAssign == 1){ if(Server1.isEmpty() == false){ Queue.add(c); } else { Server1.add(c); Processed++; } } else if(SAssign== 2){ if(Server2.isEmpty() == false){ Queue.add(c); } else { Server2.add(c); Processed++; } } } public void CountDown(){ if (this.time != 0) { --this.time; } else { System.exit(0); } } public void Format (){ int x = 0; String Service = null; String Time1= null; String Service2 = null; String Time2 = null; if (Server1.size() > 0){ Service = Server1.get(0).toString(); Time1 = Integer.toString(Server1.get(0).getServiceTime()); } if (Server2.size() > 0){ Service2 = Server2.get(0).toString(); Time2 = Integer.toString(Server2.get(0).getServiceTime()); } System.out.println("Time Remaining: " + time + " seconds"); System.out.println("Server 1: \n" + Service + " | " + Time1); System.out.println("Server 2: \n" + Service2 + " | " + Time2); System.out.println("Queue: "); if (Queue.size() > 0){ while(x < Queue.size()){ System.out.println(Queue.get(x)); x++; } } if (time == 0){ System.out.println("Total number of calls processed are : "+ Processed); System.out.println("Average number of calls processed per minute is : "+ (double)(Processed/60.0)); System.out.println("Average arrival rate per minute is : "+ (double)(callcounter/60.0)); System.out.println("Number of calls processed in first attempt : "+ firstattempt); System.out.println("Number of calls had to be requeued once : "+ queued1); System.out.println("Number of calls had to be requeued twice : "+ queued2); } } }
Caller.java
package callcenter; import java.util.Random; public class Caller { Random rand = new Random(); int CallerID; int ServiceTime; int Attempt = 0; String Name; public Caller() { this.CallerID = CallerID; } @Override public String toString() { Name = Integer.toString(CallerID); return Name; } public void setCallerID() { this.CallerID = rand.nextInt(3000) + 2000; } public int getCallerID() { return CallerID; } public int getServiceTime() { return ServiceTime; } public void setRandomTime() { this.ServiceTime = rand.nextInt(14) + 3; } public void setServiceTime() { this.ServiceTime = ServiceTime - 1; } public void setAttempt() { this.Attempt++; } public int getAttempt() { return Attempt; } }