Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Code in java 1 - Design an interactive simulation for a hamburger stand: * There

ID: 3705179 • Letter: C

Question

Code in java

1 - Design an interactive simulation for a hamburger stand:

* There are 1 thru N serving lines (10 maximum)

* Customers arrive at the rate of 0 to M customers per minute and goes to the shortest queue

* Customers wait until they are serviced (take X minutes median time)

* Simulate to T hours

2 - Read from command line the values N and M and and X and T - Prompt if missing and after the 1st pass

3 - Run the simulation using the Java random number generator to generate customers and their order processing time

* Use Normal / Gaussian distribution for service time, centered on X

4 - Keep track of:

* Average queue length

* Average customer wait time to be served

* Maximum queue length

* Maximum customer wait time

* How often the queue is empty

* How often a customer is served AFTER a customer that came after him

5 - At the end of each simulation, display statistic for the run

6 - Loop (step 2-6) simulating until user asks to stop

Hints:

- Create a small ADT called Customer - Each instance should keep trach of: arrival time, departure time, ...

- Create your own queue ADT - Do not use built-in

- Use either time-driven or event-driven simulation

- Run the simulation with 3 times with different input such:

* One simulation shows a store with sometimes empty queue (Off-peak time)

* One simulation shows a arrival rate about the same as departure rate (Desired maximum efficiency)

* One simulation shows a gradual lengthling of the queue (Peak time)

This is what I have so far:

Simulation.java

import java.util.Scanner;
public class Simulation{
private static int n;
private static int m;
private static int x;
private static int t;
private static int hour = 8;
private static int minute = 0;
private static int day = 1;
private static Gen random = new Gen();
private static final boolean DEBUG = true;
public static void main(String args[]){
    //We declare our first keyboard.
    Scanner keyboard = new Scanner(System.in);
    $("Starting program");
    boolean timeToExit = false;
    while(!timeToExit){
      try{
        System.out.println("Getting input....");
        n = Integer.parseInt(args[0]);
        m = Integer.parseInt(args[1]);
        x = Integer.parseInt(args[2]);
        t = Integer.parseInt(args[3]);
      } catch(Exception e){
        System.out.println("Failed input.... try again input 4 values delimitted by spaces");
        String tempInput = keyboard.nextLine();
        args = tempInput.split(" ");
        continue;
      }
    
      $("Making " + n + " lines");
      ServingLine lines = new ServingLine(n, 8);
    
      $("Starting sim loop...");
      Customer temp;
      for(int count = 0; count < t * 60; count++){
        tick();
        for(int rate = 0; rate < m; rate++){
          temp = new Customer(hour, minute);
          $(temp + " Has joined the line");
          lines.joinLine(temp);
        }
      
        if( lines != null || lines.nOfLines != 0)
          lines.ellapse(hour, minute);
        if( minute % 10 == 0 )
          $("Time = " + hour + ":" + minute);
        lines.serve();
      }
      timeToExit = true;
    }
}
private static void $(String in){
    if(DEBUG) try{
      System.out.printf("$ %s ", in);
    } catch (Exception e ){}
}

private static void tick(){
    if(hour == 21 ){
      day++;
      hour = 8;
    } else if ( minute == 60 ){
      hour++;
      minute = 0;
    } else  
      minute++;
}
}

Gen.java

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
public class Gen{
private String [] names = {"Adelaida", "Adelaide", "Adele", "Adelia", "Adelina"};
private Random rand;
public Gen(){rand = new Random(); }
//Gaussian Random gen
public double gGen(int input){ return Math.abs(rand.nextGaussian() * input);}
//double gen
public double dGen(int input){return Math.abs(rand.nextDouble() * input); }

public int rGen(int min, int max){ return ThreadLocalRandom.current().nextInt(min, max + 1);}
//checks if they are fat
public boolean scale(){
    float chance = rand.nextFloat();
  
    if (chance <= 0.357f)
      return true;
  
    return false;
}
//name gen
public String nGen(){
    int index = rand.nextInt((3833) + 1);
    return names[index];
}


}

ServingLine.java

import java.util.Arrays;

public class ServingLine
{
public int nOfLines;
Line[] lines;
public ServingLine(int n, int max)
{
    n = ( n < 1 ) ? 1 : n;
    n = ( n > 10 ) ? 10 : n;
    lines = new Line[n];
    nOfLines = n;
    for(int count = 0; count < n; count++){
      lines[count] = new Line(max);
    }
}

public boolean joinLine(Customer newCustomer){
    Arrays.sort(lines);
    if( lines[0].getLength() == lines[0].max )
      return false;
    else try {
      lines[0].getInLine(newCustomer);
    } catch (Exception e){
    
    }
    return true;
}

public void serve(){
    for(int count = 0; count < nOfLines; count++){
      lines[count].serve();
    }
}

public void ellapse(int hour, int minute){
    for(int count = 0; count < nOfLines; count++){
      lines[count].ellapse(hour, minute);
    }
}
}


Customer.java

public class Customer{
private String name;
private int age;
private boolean isFat;
private int[] arrival;
private int[] leave;
private int wait = -1;
private Gen customerRand = new Gen();
public Customer(int hour, int minute){
    this.name = customerRand.nGen();
    this.age   = (int) customerRand.gGen(17);
    this.isFat = customerRand.scale();
    arrival = leave = new int[]{hour, minute};
}

public String toString(){
    return "My name is " + name + " and I am " + age + " years old, " + (( isFat == true ) ? "sadly I am overweight " : "I can happilly say I am not fat. " ) ;
}

public void leave(int hour, int minute){
    if(wait == 0)
      leave = new int[]{hour, minute};
}

public int[][] getTime(){
    int result[][] = {arrival, leave};
    return result;
}

public void getServed(){
    if(wait == -1)
      wait = customerRand.rGen(2, 14);
}

public boolean ellapse(){
    if(wait == 0){
      return false;
    } else { wait--;
      return true;
    }
}
}

Line.java

public class Line
{
private static int fights = 0;
private static int cuts = 0;
private Customer[] customers;
public int max;
private int backOfLine = 0;
private Gen random = new Gen();
private boolean hasBeenServed = false;

public Line(int length){
    customers = new Customer[length];
    this.max = length;
}
public void getInLine(Customer newCustomer) throws Exception{
    if( backOfLine == 0 ){
      customers[0] = newCustomer;
      backOfLine++;
    } else {
      if( backOfLine == 5 ){
        throw new Exception("Hey buddy, there is no room in this line, get lost." );
      } else {
        customers[backOfLine] = newCustomer;
        backOfLine++;
        if( random.gGen(1) % 2 == 0) {
          cuts++;
          if( random.gGen(1) % 2 == 0 ){
            fights++;
          }
        }
      }
    }
}

public Customer getOutOfLine(){
    if(backOfLine == 5 ){
      int temp = backOfLine;
      backOfLine--;
      return customers[temp];
    }
    int temp = backOfLine;
    backOfLine--;
    hasBeenServed = false;
    return customers[temp];
}

public int getLength(){
    return backOfLine;
}

public void ellapse(int hour, int minute){
    if(customers[0].ellapse()){
      customers[0].leave(hour, minute);
      getOutOfLine();
    }
}

public void serve(){
    if( !hasBeenServed ) {
      customers[0].getServed();
      hasBeenServed = true;
    }
}
}

My problem is that whenever i do enter the 4 values with the space in between i get an Array index out of bounds exception error:

java.lang.ArrayIndexOutOfBoundsException: 907
   at Gen.nGen(Gen.java:25)
   at Customer.<init>(Customer.java:10)
   at Simulation.main(Simulation.java:41)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)

Please help me perfect my code

Thank you

Explanation / Answer

The problem is

private String [] names = {"Adelaida", "Adelaide", "Adele", "Adelia", "Adelina"};

Names Array is of length 5 and in the  nGen() function we are accessing the Array out of Bound

Change the line to
   int index = rand.nextInt(5);

In the
nGen() function . It will start working


Code Fix

//name gen
public String nGen(){
    int index = rand.nextInt((5));
    return names[index];
}



Thanks, let me know if there is any concern. PLEASE RATE if helpful

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote