I\'m trying to calculate the total \'wait time\' and the average wait time for my \'restaurant
waitlist\' application. I can\'t figure that part out and I\'ve tried to display the total, but it keeps
displaying the total for one. I\'m using a linkedlist and want it to keep adding as I add people to
the waitlist. I also do not know how to display the average as the name is a string and if I do the
total/name, it gives me an error. If I parse it to an Int, it gives me an error. Any help would be
appreciated. When I click the following button, it should display the running total.
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
Random rand = new Random();
String name = txtName.getText();
int time = rand.nextInt(30) + 1;
int totaltime = time;
int partySize = Integer.parseInt(txtSize.getText());
txtTotal.setText(String.valueOf(totaltime) + \" minutes until your table is ready.\");
Highest = partySize;
String result = \" Name: \" + txtName.getText() + \" Party Size: \" + partySize + \" Wait Time: \"
+ time + \" minutes.\";
stack.enqueue(result);
Wait++;
}
private void btnDisplayActionPerformed(java.awt.event.ActionEvent evt) {
String result;
int s;
int size = stack.size();
lstOutput.removeAll();
for (s = 0; s < size; s++) {
result = (String)stack.dequeue();
lstOutput.add(result);
}
}
stack is my LinkedList.
LinkedListStack stack = new LinkedListStack();
This is the LinkedListStack
public class LinkedListStack implements QueueInterface {
private LinkedList list = new LinkedList<>(); // an empty list
public LinkedListStack() {
} // new queue relies on the initially empty list
public int size() {
return list.getSize();
}
public boolean isEmpty() {
return list.isEmpty();
}
public void enqueue(E element) {
list.addLast(element);
}
public E first() {
return list.first();
}
public E dequeue() {
return list.removeFirst();
}
}
This is my QueueInterface
public interface QueueInterface {
int size();
boolean isEmpty();
// adds an item to the stack
void enqueue(E e);
// return but not remove the top item on the stack
E first();
// remove item at the top of the stack
E dequeue();
}
And this is the LinkedList I\'m using.
public class LinkedList {
private int size;
private Node head;
private Node tail;
// default constructor
public LinkedList() {
size = 0;
head = null;
tail = null;
}
// read-only property
public int getSize() {
return size;
}
public boolean isEmpty() {
// replaces an if/else
return (size == 0);
}
// return but not remove head of the list
public E first() {
if ( isEmpty() ) {
return null;
}
else {
return head.getElement();
}
}
public E last() {
if ( isEmpty() ) {
return null;
}
else {
return tail.getElement();
}
}
public void addFirst(E e) {
// create a new node and make it the new head of the list
head = new Node<>(e, head);
if (size == 0) {
tail = head; // special case first item in the list
}
size++;
}
public void addLast(E e) {
// create a new node and add to the tail of the list
Node newest = new Node<>(e, null);
if (size =.
Im trying to calculate the total wait time and the average wai.pdf
1. I'm trying to calculate the total 'wait time' and the average wait time for my 'restaurant
waitlist' application. I can't figure that part out and I've tried to display the total, but it keeps
displaying the total for one. I'm using a linkedlist and want it to keep adding as I add people to
the waitlist. I also do not know how to display the average as the name is a string and if I do the
total/name, it gives me an error. If I parse it to an Int, it gives me an error. Any help would be
appreciated. When I click the following button, it should display the running total.
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
Random rand = new Random();
String name = txtName.getText();
int time = rand.nextInt(30) + 1;
int totaltime = time;
int partySize = Integer.parseInt(txtSize.getText());
txtTotal.setText(String.valueOf(totaltime) + " minutes until your table is ready.");
Highest = partySize;
String result = " Name: " + txtName.getText() + " Party Size: " + partySize + " Wait Time: "
+ time + " minutes.";
stack.enqueue(result);
Wait++;
}
private void btnDisplayActionPerformed(java.awt.event.ActionEvent evt) {
String result;
2. int s;
int size = stack.size();
lstOutput.removeAll();
for (s = 0; s < size; s++) {
result = (String)stack.dequeue();
lstOutput.add(result);
}
}
stack is my LinkedList.
LinkedListStack stack = new LinkedListStack();
This is the LinkedListStack
public class LinkedListStack implements QueueInterface {
private LinkedList list = new LinkedList<>(); // an empty list
public LinkedListStack() {
} // new queue relies on the initially empty list
public int size() {
return list.getSize();
}
public boolean isEmpty() {
return list.isEmpty();
}
public void enqueue(E element) {
list.addLast(element);
}
public E first() {
return list.first();
}
3. public E dequeue() {
return list.removeFirst();
}
}
This is my QueueInterface
public interface QueueInterface {
int size();
boolean isEmpty();
// adds an item to the stack
void enqueue(E e);
// return but not remove the top item on the stack
E first();
// remove item at the top of the stack
E dequeue();
}
And this is the LinkedList I'm using.
public class LinkedList {
private int size;
private Node head;
private Node tail;
// default constructor
public LinkedList() {
size = 0;
head = null;
tail = null;
}
// read-only property
public int getSize() {
return size;
4. }
public boolean isEmpty() {
// replaces an if/else
return (size == 0);
}
// return but not remove head of the list
public E first() {
if ( isEmpty() ) {
return null;
}
else {
return head.getElement();
}
}
public E last() {
if ( isEmpty() ) {
return null;
}
else {
return tail.getElement();
}
}
public void addFirst(E e) {
// create a new node and make it the new head of the list
head = new Node<>(e, head);
if (size == 0) {
tail = head; // special case first item in the list
}
size++;
}
5. public void addLast(E e) {
// create a new node and add to the tail of the list
Node newest = new Node<>(e, null);
if (size == 0) { // special case for the first item
head = newest; // now head points to the new node
}
else {
tail.setNext(newest);
}
tail = newest;
size++;
}
public E removeFirst() {
if (isEmpty() ) {
return null;
}
else {
E tets = head.getElement();
head = head.getNext();
size--;
if (size == 0) {
tail = null; // list is now empty
}
return tets;
}
}
// nested class
public class Node {
private E element;
private Node next;
6. // custom constructor
public Node(E e, Node n) {
element = e;
next = n;
}
// get element
public E getElement() {
return element;
}
public Node getNext() {
return next;
}
public void setNext(Node n) {
next = n;
}
} // end nested node class
} // end of LinkedList
Solution
Now, as per the code given, below are my finding and the updated part in the bold and their
explanation in the comments:
private static int totalWaitTime=0;
// There has to be an static total wait counter. You were actually getting the random time and
printing the same //time due to which the time for single was occurring.
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
Random rand = new Random();
String name = txtName.getText();
int time = rand.nextInt(30) + 1;
7. totalWaitTime+=time; // For every party we generate the time and add the time to get the total
time
int partySize = Integer.parseInt(txtSize.getText());
txtTotal.setText(String.valueOf(totalWaitTime) + " minutes until your table is ready."); //
Updated //the variable name for the totalWaitTime to print the total
Highest = partySize;
int avgWaitTime = totalWaitTime/stack.size(); // avgWaitTime is the variable to hold the
average, //it would be the totalwaittime divide by the stack size. Here the stack size is actually
the total party waiting.
String result = " Name: " + txtName.getText() + " Party Size: " + partySize + " Wait Time: "
+ time + " minutes.";
stack.enqueue(result);
Wait++;
}
private void btnDisplayActionPerformed(java.awt.event.ActionEvent evt) {
String result;
int s;
int size = stack.size();
lstOutput.removeAll();
for (s = 0; s < size; s++) {
result = (String)stack.dequeue();
// Also you would have to reduce the time when an customer is given its table,so I have split the
string and got the //time from it
txtTotal.setText(result.split(" Wait Time: ").split(" ")[0] + " minutes until your table
is ready.");
lstOutput.add(result);
8. }
}
I have tried to not touch your Stack and LinkedList part, just the handler button event code.