/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template
 */
package calculator;

import java.util.Scanner;

/**
 *
 * @author Blasco
 */
public class Calculator {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws InterruptedException {
        Scanner sc = new Scanner(System.in);
        System.out.print("Indique en cifras el límite para introducir X números: ");
        int limite = sc.nextInt();
        sc.nextLine();
        double[] numeros = new double[limite];
        char seguir = ' ';
        boolean salir = false;
        int i = 0, opcion;
        System.out.println("Puede introducir hasta " + limite + " números.");
        do {
            System.out.print("Introduce número " + (i+1) + ": ");
            numeros[i] = sc.nextDouble();
            sc.nextLine();
            if(i == limite - 1){
                System.out.println("Se ha llegado al tope de números permitidos.");
            } else {
                System.out.print("¿Desea introducir el siguiente número (S/N)? ");
                seguir = sc.next().charAt(0);
                sc.nextLine();
                if(seguir == 'n' || seguir == 'N'){
                    break;
                }
            }
            i++;
        } while (i < limite && (seguir != 'n' || seguir != 'N'));
        System.out.println("Listando números...\n");
        Thread.sleep(2000);
        do {
            System.out.print("Números[");
            for (i = 0; i < numeros.length; i++) {
                if(i == numeros.length - 1){
                    System.out.print(numeros[i]);
                } else {
                    System.out.print(numeros[i] + ", ");
                }
            }
            System.out.print("]\n");
            System.out.println("---------------- CALCULADORA ----------------");
            System.out.println("| 0. Salir.                                 |");
            System.out.println("| 1. Sumar números.                         |");
            System.out.println("| 2. Restar números.                        |");
            System.out.println("| 3. Multiplicar números.                   |");
            System.out.println("| 4. Dividir números.                       |");
            System.out.println("| 5. Calcular la media.                     |");
            System.out.println("| 6. Sacar el número más alto.              |");
            System.out.println("| 7. Sacar el número más bajo.              |");
            System.out.println("---------------------------------------------");
            System.out.print("Elija una opción: ");
            opcion = sc.nextInt();
            sc.nextLine();
            
            switch (opcion) {
                case 0:
                    System.out.println("Va a salir del menú. Pulse INTRO para continuar...");
                    sc.nextLine();
                    salir = true;
                    break;
                case 1:
                    double suma = 0;
                    for (i = 0; i < numeros.length; i++) {
                        suma += numeros[i];
                    }
                    System.out.println("La suma de todos los números da " + suma + ".");
                    System.out.println("Pulse INTRO para continuar...");
                    sc.nextLine();
                    break;
                case 2:
                    System.out.println("Para hacer la resta, sacaremos un aleatorio entre 0 y 1000.");
                    double random1 = Math.random()*1000;
                    Thread.sleep(2000);
                    System.out.printf("\nEl número elegido es %.2f.", random1);
                    double resta = 0;
                    double resultado1 = 0;
                    for (i = 0; i < numeros.length; i++) {
                        resta -= numeros[i];
                    }
                    resultado1 = random1 + resta;
                    System.out.printf("\nLa resta del todos los números desde el número %.2f da %.2f.\n", random1, resultado1);
                    System.out.println("Pulse INTRO para continuar...");
                    sc.nextLine();
                    break;
                case 3:
                    double producto = 1;
                    for (i = 0; i < numeros.length; i++) {
                        producto *= numeros[i];
                    }
                    System.out.println("El producto de todos los números da " + producto + ".");
                    System.out.println("Pulse INTRO para continuar...");
                    sc.nextLine();
                    break;
                case 4:
                    System.out.println("Para hacer la división, haremos lo mismo que la resta, es decir, sacaremos otro aleatorio entre 0 y 1000.");
                    double random2 = Math.random()*1000;
                    Thread.sleep(2000);
                    System.out.printf("\nEl número elegido es %.2f.", random2);
                    double division = 1;
                    double resultado2 = 0;
                    for (i = 0; i < numeros.length; i++) {
                        if(i > 0 && numeros[i] == 0){
                            System.err.println("Se han detectado ceros desde el segundo número hasta el último. No se puede hacer la división.");
                            break;
                        } else {
                            division /= numeros[i];
                        }
                    }
                    if(division == 0) {
                        System.err.println("La división ha dado cero. No se podrá mostrar el resultado final esperado.");
                    } else {
                        resultado2 = random2 * division;
                        System.out.printf("\nLa división de todos los números desde el número %.2f da %.2f.\n", random2, resultado2);
                    }
                    System.out.println("Pulse INTRO para continuar...");
                    sc.nextLine();
                    break;
                case 5:
                    suma = 0;
                    double media = 0;
                    for (i = 0; i < numeros.length; i++) {
                        suma += numeros[i];
                    }
                    media = suma / numeros.length;
                    System.out.printf("\nLa media de todos los números da %.2f.\n", media);
                    System.out.println("Pulse INTRO para continuar...");
                    sc.nextLine();
                    break;
                case 6:
                    double mayor = 0;
                    for (i = 0; i < numeros.length; i++) {
                        if(mayor < numeros[i]){
                            mayor = numeros[i];
                        }
                    }
                    System.out.printf("\nEl número más alto es %.2f.\n", mayor);
                    System.out.println("Pulse INTRO para continuar...");
                    sc.nextLine();
                    break;
                case 7:
                    double menor = numeros[numeros.length-1];
                    for (i = 0; i < numeros.length; i++) {
                        if(menor > numeros[i]){
                            menor = numeros[i];
                        }
                    }
                    System.out.printf("\nEl número más bajo es %.2f.\n", menor);
                    System.out.println("Pulse INTRO para continuar...");
                    sc.nextLine();
                    break;
                default:
                    System.out.println("Opción no válida. Pulse INTRO para continuar...");
                    sc.nextLine();
            }
        } while (salir == false);
        System.out.println("Programa terminado.");
        sc.close();
    }
    
}
