Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.LinkedList;
- import java.util.Queue;
- public class Main4 {
- public static void main(String[] args) {
- Queue<Integer> queue1 = new LinkedList<Integer>();
- Queue<Integer> queue2 = new LinkedList<Integer>();
- String[] options = {
- "Ingresar número en cola 1",
- "Ingresar número en cola 2",
- "Eliminar primero en la cola 1",
- "Eliminar primero en la cola 2",
- "Generar números aleatorios",
- "Mostrar elementos guardados",
- "Comparar colas"
- };
- Menu menu = new Menu(options);
- Integer inputNumber;
- Integer option = 0;
- do {
- option = menu.getOption();
- switch(option) {
- //Ingreso de un número por teclado implementado la clase Helper
- //Se guardará en la cola 1
- case 1:
- inputNumber = Helper.getInt("Ingrese un número para la cola 1: ");
- queue1.add(inputNumber);
- System.out.println("Número almacenado");
- Helper.pressEnterKeyToContinue();
- break;
- //Ingreso de un número por teclado implementado la clase Helper
- //Se guardará en la cola 1
- case 2:
- inputNumber = Helper.getInt("Ingrese un número: ");
- queue2.add(inputNumber);
- System.out.println("Número almacenado");
- Helper.pressEnterKeyToContinue();
- break;
- //Elimina el número que está primero en la cola 1
- case 3:
- if(!queue1.isEmpty()) {
- Integer numberDequeue = queue1.poll();
- System.out.println("Número que salió: " + numberDequeue);
- }else System.out.println("La cola 1 está vacía");
- Helper.pressEnterKeyToContinue();
- break;
- //Elimina el número que está primero en la cola 2
- case 4:
- if(!queue2.isEmpty()) {
- Integer numberDequeue = queue2.poll();
- System.out.println("Número que salió: " + numberDequeue);
- }else System.out.println("La cola 2 está vacía");
- Helper.pressEnterKeyToContinue();
- break;
- //Generación de números aleatorios para las dos colas implementado la clase Helper
- case 5:
- queue1 = new LinkedList<Integer>();
- queue2 = new LinkedList<Integer>();
- //Número aleatorio de la cantidad de elementos a generar
- Integer maxSize = Helper.randomInt(5, 10);
- for(int i = 0; i < maxSize; i++) {
- queue1.add(Helper.randomInt(1, 500));
- queue2.add(Helper.randomInt(1, 500));
- }
- System.out.println("Números generados");
- printQueue(queue1, "Cola 1");
- printQueue(queue2, "Cola 2");
- Helper.pressEnterKeyToContinue();
- break;
- //Muestra por pantalla los números encolados
- case 6:
- printQueue(queue1, "Cola 1");
- printQueue(queue2, "Cola 2");
- Helper.pressEnterKeyToContinue();
- break;
- //Llamada al método que resuelve lo que solicita el ejercicio
- case 7:
- try {
- Integer result = comparation(queue1, queue2);
- if(result > 0) System.out.println("La cola 1 es mayor");
- if(result < 0) System.out.println("La cola 2 es mayor");
- if(result == 0) System.out.println("Son iguales cola 1 y cola 2");
- System.out.println("Resultado: " + result);
- }catch(RuntimeException e) {
- System.err.println("No se pudo realizar la acción " + e);
- }
- Helper.pressEnterKeyToContinue();
- break;
- }
- }while(option !=0);
- System.out.println("Fin del programa");
- }
- /**
- * Returna la comparación elemento a elemento de los valores
- * del frente de dos colas de números enteros, la comparación se realiza
- * restando dichos números. Ambas colas no deben estar vacías
- * @param q1: Una primer cola de números enteros
- * @param q2: Una segunda cola de números enteros a comparar con la primera
- * @return un número entero mayor a cero si la primera cola es mayor, menor a cero
- * si la segunda es mayor, o cero si son iguales
- */
- public static Integer comparation(Queue<Integer> q1, Queue<Integer> q2) {
- int result = 0;
- //Se realiza una copia de las colas para no modificar las originales
- //porque en el peor de las cosas se desencolaran todos sus elementos
- Queue<Integer> queue1 = new LinkedList<Integer>(q1);
- Queue<Integer> queue2 = new LinkedList<Integer>(q2);
- if(queue1.isEmpty()) throw new RuntimeException("Error: La cola 1 está vacía");
- if(queue2.isEmpty()) throw new RuntimeException("Error: La cola 2 está vacía");
- //Se obtiene la longuitud máxima de una cola
- //Si tienen diferentes tamaños, será el valor de la mayor cantidad de elementos
- int maxSize = queue1.size() > queue2.size()? queue1.size(): queue2.size();
- for (int i = 0; i < maxSize; i++) {
- //Si al desencolar ya no quedan elementos en una cola
- //Entonces se considerará que la mayor cola es la otra
- if(queue1.peek() == null) return queue2.peek();
- if(queue2.peek() == null) return queue1.peek();
- //La comparacion se realiza comparando uno a uno los elementos
- //del frente de cada cola
- result = queue1.peek() - queue2.peek();
- if(result > 0) break; //La primer cola es mayor
- if(result < 0) break; //La segunda cola es mayor
- //Si la diferencia es cero, entonces aún no se salió del ciclo
- //Se elimina el primer elemento de ambas colas para la comparación siguiente
- queue1.poll();
- queue2.poll();
- }
- return result;
- }
- /**
- * Muestra por pantalla los elementos de una cola de números enteros
- * en el orden en que se ingresaron. Si no posee elementos se indicará
- * que está vacia.
- * @param queue: cola de números enteros a mostrar
- * @param queueName: string con el nombre de la cola
- */
- public static void printQueue(Queue<Integer> queue, String queueName) {
- if(queue.isEmpty()) {
- System.out.println(queueName + ": vacía");
- }
- else {
- System.out.print(queueName + ": ");
- for (Integer element : queue) {
- System.out.print(element + " ");
- }
- System.out.println("");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement