// Repeatedly read a sequence of "add ", "get" and "status" // commands from standard input. Command "add" adds its operand at // the end of a FIFO queue; command "get" removes and prints the double // at the front of the queue; command "status" prints the size of // the queue and the sum of the doubles in the queue. // Class Queue maintains a FIFO queue of doubles. class Queue { List elements; Double elementSum; // Constructor. Queue () { elements = new List(); elementSum = 0; } // Adds double at end of queue. void add (Double element) { elements.add(element); elementSum = elementSum + element; } // Returns double at front of queue and removes it. Double get () { Double element; element = [Double]elements.get(0); elements.remove(0); elementSum = elementSum - element; return element; } // Returns sum of current queue elements. Double sum() { return elementSum; } // Returns number of elements in queue. Integer size() { return elements.size(); } } // Class Main contains the main function main(). class Main { // Repeatedly read and execute commands. void main () { Queue queue; Double double; queue = new Queue(); while (true) { String command; command = system.readString(); if (command.equals("add")) { double = system.readDouble(); queue.add(double); } elseif (command.equals("get")) { double = queue.get(); system.println(double); } elseif (command.equals("status")) { system.print("Length: "); system.println(queue.size()); system.print("Sum: "); system.print(queue.sum()); } else { system.print("Error: Invalid command: "); system.println(command); } } } }