import java.util.*;

/**
  * Ejercicios Tema 6. Condicionales 
  * Clase principal que contiene el main que permite ejecutar la aplicación en modo consola.
  */
class soluciones
{
	/**
	  * Ejecución de los distintos ejercicios.
	  */ 
	public static void main(String [] args)
	{
		Ejercicios e = new Ejercicios();
		// Ejercicio 1.
		System.out.println("EJERCICIO 1");
		boolean mayor; 
		mayor = e.esMayor(8, 7);
		System.out.println("Es mayor 8 que 7: " + mayor);
		
		mayor = e.esMayor(7, 8);
		System.out.println("Es mayor 7 que 8: " + mayor);
		
		mayor = e.esMayor(8, 8);
		System.out.println("Es mayor 8 que 8: " + mayor);	
		
		// Ejercicio 2.
		System.out.println("");
		System.out.println("EJERCICIO 2");
		boolean igual;
		String cadena1 = "Cadena 1";
		String cadena2 = "Cadena 2";
		System.out.println("Son iguales las cadenas: " + e.esIgualCadena(cadena1,cadena2));	
		cadena2 = cadena1;
		System.out.println("Son iguales las cadenas: " + e.esIgualCadena(cadena1,cadena2));	
		
		// Ejercicio 3.
		System.out.println("");
		System.out.println("EJERCICIO 3");
		double real1 = 254.15;
		double real2 = 255.15;
		double real3 = 254.37;
		
		System.out.println("El real mayor es: " + e.mayorDouble(real3,real2,real1));
		System.out.println("El real mayor es: " + e.mayorDouble(real1,real2,real3));
		System.out.println("El real mayor es: " + e.mayorDouble(real2,real3,real1));
		
		
		// Ejercicio 4.
		System.out.println("");
		System.out.println("EJERCICIO 4");
		System.out.println("El real menor es: " + e.menorDouble(real1,real2));
		System.out.println("El real menor es: " + e.menorDouble(real2,real1));
		
		// Ejercicio 5.
		System.out.println("");
		System.out.println("EJERCICIO 5");
		double total = 249.99;
		double entregado = 249.99; 
		
		e.cambioCaja(total,entregado);
		
		entregado = 248.99;
		e.cambioCaja(total,entregado);
		
		entregado = 300;
		e.cambioCaja(total,entregado);
		
		// Ejercicio 6.
		System.out.println("");
		System.out.println("EJERCICIO 6");
		
		e.opcionMenu('1');
		e.opcionMenu('2');
		e.opcionMenu('3');
		e.opcionMenu('4');
		e.opcionMenu('5');
		e.opcionMenu('6');
		
		// Ejercicio 7.
		System.out.println("");
		System.out.println("EJERCICIO 7");
		e.diaSemana('L');
		e.diaSemana('m');
		e.diaSemana('X');
		e.diaSemana('j');
		e.diaSemana('V');
		e.diaSemana('s');
		e.diaSemana('D');
		e.diaSemana('c');
		
		// Ejercicio 8.
		System.out.println("");
		System.out.println("EJERCICIO 8");
	
		e.traductor("computer");
		e.traductor("mouse");
		e.traductor("keyboard");
		e.traductor("Computer"); // No reconocido por la utilización de C mayúscula
		
		// Ejercicio 9.
		System.out.println("");
		System.out.println("EJERCICIO 9");
		
		e.calculoMulta(40);
		e.calculoMulta(60);
		e.calculoMulta(80);
		e.calculoMulta(120);
		e.calculoMulta(130);
		e.calculoMulta(140);
		e.calculoMulta(150);
		e.calculoMulta(180);
		e.calculoMulta(200);
		
		// Ejercicio 10.
		System.out.println("");
		System.out.println("EJERCICIO 10");
		Figura figura1 = new Figura(3);
		Figura figura2 = new Figura(4);
		Figura figura3 = new Figura(3);
		
		System.out.println("Son iguales las figuras 1 y 2: " + e.figurasIguales(figura1,figura2));
		System.out.println("Son iguales las figuras 1 y 3: " + e.figurasIguales(figura1,figura3));
	}
} // class soluciones

class Ejercicios
{


	/**
	 * Método que devuelve si un número -a- es mayor que otro -b-
	 */ 
	boolean esMayor(int a, int b)
	{
		return (a>b);
		/*
		 * Setencia equivalente a:
		 * if (a>b) return true;
		 * else return false;
		 */ 
	}
	
	/**
	  * Método que devuelva si una cadena de caracteres es igual a otra
	  */
	boolean esIgualCadena(String cadena1, String cadena2)
	{
		return (cadena1.equals(cadena2));
	}
	
	/**
	 * Dados tres reales devolver el mayor de los tres. 
	 */ 
	double mayorDouble(double a, double b, double c) 
	{
		double mayor = 0;
		if (a>mayor) mayor = a;
		if (b>mayor) mayor = b;
		if (c>mayor) mayor = c;
		return mayor;
	}
	 
	/**
	   * Dados dos reales devolver el menor de los dos
	   * ¿Qué pasa si son iguales? -> Devuelve b
           */		
	double menorDouble(double a, double b)
	{
		if (a<b) return a;
		else return b;
	}
	
	/**
	  * Suponga que está escribiendo un programa para un ordenador de una caja de una tienda. 
	  * Tiene que escribir un método que reciba el total de la compra efectuada y el importe que entrega el 
	  * cliente.
	  * El método mostrará por pantalla "falta importe" cuando la cantidad entregada sea inferior al total de la compra. 
	  * "gracias por su compra" Si el importe entregado es exacto al de la compra. Y, "su cambio es X", donde X es el 
	  * cambio a devolver si la cantidad entregada supera al total de la compra.
	  */
	 void cambioCaja(double total, double entregado)
	 {
		if (total == entregado)
			System.out.println("Gracias por su compra.");
		else if (total > entregado)
			System.out.println("Falta importe.");
		else
			System.out.println("Su cambio es: " + Double.toString(entregado - total));
	 }
		
	/** 
	  * Suponga que se presenta por pantalla un menú de usuario. Con las opciones:
	  *    1.- Seleccionar cliente.
	  *    2.- Insertar cliente.
	  *    3.- Editar cliente.
	  *    4.- Borrar cliente.
	  *    5.- Salir.
	  *  Se pide implementar un método que reciba un caracter correspondiente a la opción seleccionada
	  *  por el usuario y que imprima por pantalla una cadena significativa de la opción que ha seleccionado. 
	  */
	 void opcionMenu(char opcion)
	 {
		switch (opcion)
		{
			case '1':
				System.out.println("Seleccionar cliente.");
				break;
			case '2':
				System.out.println("Insertar cliente.");
				break;
			case '3':
				System.out.println("Editar cliente.");
				break;
			case '4':
				System.out.println("Borrar cliente.");
				break;
			case '5':
				System.out.println("Salir cliente.");
				break;
			default: 
				System.out.println("Opcion no reconocida");
		}
	 }
	 
	 /**
	    * traductor de días de la semana.
            * Escribir un método que reciba la inicial del día de la semana y devuelva el nombre completo del día.
	    */
	 void diaSemana(char dia)
	 {
		switch (dia)
		{
			case 'L':
				System.out.println("Lunes");
				break;
			case 'l':
				System.out.println("Lunes");
				break;
			case 'M':
				System.out.println("Martes");
				break;
			case 'm':
				System.out.println("Martes");
				break;
			case 'X':
				System.out.println("Miercoles");
				break;
			case 'x':
				System.out.println("Miercoles");
				break;
			case 'J':
				System.out.println("Jueves");
				break;
			case 'j':
				System.out.println("Jueves");
				break;
			case 'V':
				System.out.println("Viernes");
				break;
			case 'v':
				System.out.println("Viernes");
				break;
			case 'S':
				System.out.println("Sabado");
				break;
			case 's':
				System.out.println("Sabado");
				break;
			case 'D':
				System.out.println("Domingo");
				break;
			case 'd':
				System.out.println("Domingo");
				break;
			default:
				System.out.println("Dia incorrecto");
			
		}
	 }
	
	/**
	  *  Escriba un método que en base a una palabra de entrada en inglés permita mostrar
	  *  su traducción al castellano. De momento, sólo se podrán traducir los términos:
	  *      computer, mouse y keyboard
	  */
	 void traductor(String termino)
	 {
		if (termino.equals("computer"))
			System.out.println("ordenador");
		else if (termino.equals("mouse"))
			System.out.println("raton");
		else if (termino.equals("keyboard"))
			System.out.println("teclado");
		else 
			System.out.println("Termino no reconocido.");
	 
		// ¿Se podría utilizar un switch?
	 }
	
	/**
	  * Escriba un método que calcule la cuantía económica que supone un exceso de 
	  * velocidad en una autopista. Las reglas son las siguientes: 
	  *   - De 0 a 60Kms/h: multa de 300 euros por velocidad por debajo de límites.
	  *   - Mayor que 60 Kms/h hasta 120 kms/h: no hay multa.
	  *   - Mayor que 120 Kms/h y menor igual que 140 Kms/h, multa de 300 euros.
	  *   - Ente 140 y 180, multa de 600 euros.
	  *   - Mayor que 180, 1000 euros de multa.
	  * Nota: Estos valores son inventados. 
	  */
	void calculoMulta(int velocidad)
	{
		if ((velocidad > 0) && (velocidad <=60))
			System.out.println("300 euros por velocidad bajo límites");
		else if ((velocidad>60) && (velocidad<= 120))
			System.out.println("Sin multa");
		else if ((velocidad>120) && (velocidad<=140))
			System.out.println("300 euros por exceso de velocidad");
		else if ((velocidad>140) && (velocidad<=180))
			System.out.println("600 euros por exceso de velocidad");
		else 
			System.out.println("1000 euros por exceso de velocidad");
	}
	
	
	/**
	  * Dados dos objetos Figura, donde simplemente, una figura está 
	  * representada por el número de lados. Crear un método que reciba dos
	  * objetos de la clase Figura y determine si son iguales. 
	*/  
	boolean figurasIguales(Figura figura1, Figura figura2)
	{
		return (figura1.equals(figura2));
	}
}  // class Ejercicios

class Figura
{
	private int numLados;
	
	/**
	 * Constructor de la clase. 
	 */ 
	Figura (int numLados)
	{
		this.numLados = numLados;
	}

	boolean equals(Figura f)
	{
		if (f.numLados == this.numLados)
			return true;
		else 
			return false;
		// Más elegante escribir; return (f.numLados = this.numLados);
	}
}  // class Figura
