import java.util.Random; class BankSimulation { static Random rd = new Random(); static int Option(int percents[]) { int i = 0, perc, choice = Math.abs(rd.nextInt()) % 100 + 1; for (perc = percents[0]; perc < choice; perc += percents[i+1], i++); //System.out.print(" option2 "+choice+" "+i+" "+perc+" "+percents[i]+" "); return i; } public static void main(String args[]) { int[] arrivals = {15,20,25,10,30}; int[] service = {0,0,0,10,5,10,10,0,15,25,10,15}; int[] clerks = {0,0,0,0}; int clerksSize = clerks.length; int customers, t, i, numOfMinutes = 100, x; double maxWait = 0.0, thereIsLine = 0.0, currWait = 0.0; Queue simulQ = new Queue(); for (t = 1; t <= numOfMinutes; t++) { System.out.print(" t = " + t); for (i = 0; i < clerksSize; i++)// after each minute subtract if (clerks[i] < 60) // at most 60 seconds from time clerks[i] = 0; // left to service the current else clerks[i] -= 60; // customer by clerk i; //for (j = 0; j < clerksSize; j++) printf("clerk1: %d %d ",j,clerks[j]); customers = Option(arrivals); for (i = 0; i < customers; i++) { // enqueue all new customers x = Option(service)*10; // (or rather service time simulQ.enqueue(new Integer(x)); // they require); currWait += x; } //printf("clerks %d customers %d ",i,customers); // dequeue customers when clerks are available: for (i = 0; i < clerksSize && !simulQ.isEmpty(); ) if (clerks[i] < 60) { x = ((Integer) simulQ.dequeue()).intValue(); // assign more than one customer clerks[i] += x; // to a clerk if service time currWait -= x; // is still below 60 sec; } else i++; if (!simulQ.isEmpty()) { thereIsLine++; // return ((long) (population / area * 10000000.0)) / 10.0; // System.out.print(" wait = " + currWait/60.0); System.out.print(" wait = " + ((long)(currWait/6.0)) / 10.0); if (maxWait < currWait) maxWait = currWait; } else System.out.print(" wait = 0;"); /*for (j = 0; j < clerkssize; j++) printf("clerk2: %d %d ",j,clerks[j]);*/ } System.out.println("\nFor " + clerksSize + " clerks, there was a line " + thereIsLine/numOfMinutes*100.0 + "% of the time;\n" + "maximum wait time was " + maxWait/60.0 + " min."); } }