Java - Conversor

 
Vista:
sin imagen de perfil

Conversor

Publicado por Gonzalo (10 intervenciones) el 23/01/2022 23:10:22
Realiza un conversor de medidas; por ejemplo, entre galones, pintas y litros de manera que haya una clase medida que contenga los atributos valor y tipo(String o Char)(de medida) con sus getter y setter y sus constructores. Dispondremos también de una clase conversión que imple-mentará los diferentes métodos de conversión en función de las medidas de entrada y de salida. Por último, desde la clase principal deberemos crear un menú que nos permita introducir dos medidas con sus respectivas unidades y elegir el tipo de conversión de salida; además el programa solo finalizará cuando indiquemos no queremos continuar(habrá que preguntar al usuario)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Conversor

Publicado por Kabuto (1379 intervenciones) el 24/01/2022 11:14:10
La clase Medida sería muy sencilla.
Atributo double (o int) para el valor y un char para identificar si es G->galones, P->pintas o L->litros
Sus getters y setters.
Y se podría sobreescribir su método toString() para construir una cadena que muestre el valor en pantalla indicando la medida adecuada según el char.

La clase Conversor, yo la haría con método estáticos.
Un método para convertir de pintas a galones, otro de pintas a litros, otro de galones a pintas, etc....

Cada uno de estos métodos recibiría como argumento un objeto Medida, que es quien tendrá el valor que se ha de convertir.
Aquí podemos elegir entre hacer un método void que no retorne nada, si no que modifique el valor y el tipo del objeto Medida que ha recibido para hacer la conversión.
La otra manera es hacer un método que retorne una nueva Medida con el valor convertido y así no se modifica la medida original.

Ambas maneras son válidas, aunque yo prefiero la segunda.

Y con esto, ya sería hacer un menú con opciones para elegir el tipo de conversión o salir del programa.

Según el tipo de conversión escogida, se pide valor para la medida original, se construye una Medida y se invoca al método estático correspondiente de la clase Conversor. Tras el proceso de conversión, se muestra el nuevo valor en pantalla y retornamos al menú.


A continuación pongo un código de ejemplo, aunque te invito a que primero lo intentes tú a tu manera. Ya si luego te atascas o lo que sea, consultas este ejemplo y/o nos preguntas lo que necesites.

Clase Medida
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class Medida {
 
	private double valor;
	private char tipo; //G->galones - P->pintas - L-litros
 
	public Medida(double valor, char tipo) {
		this.valor = valor;
		this.tipo = tipo;
	}
 
	public double getValor() {
		return valor;
	}
 
	public void setValor(double valor) {
		this.valor = valor;
	}
 
	public char getTipo() {
		return tipo;
	}
 
	public void setTipo(char tipo) {
		this.tipo = tipo;
	}
 
	@Override
	public String toString() {
		String tipoValor = "";
		switch(tipo) {
		case 'G':
			tipoValor = "Galones";
			break;
		case 'P':
			tipoValor = "Pintas";
			break;
		case 'L':
			tipoValor = "Litros";
			break;
		default:
			tipoValor = "Desconocido";
		}
		return String.format("%.2f %s", valor, tipoValor);
	}
 
}

Clase Conversor.
Solo pongo dos métodos de ejemplo, el resto se pueden escribir siguiendo el mismo patrón.
Insisto en que son método estáticos, es decir, se podrán invocar sin tener que instanciar un objeto Conversor
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Conversor {
 
	public static Medida pintasToGalones(Medida pintas) {
		double valorG = pintas.getValor() * 0.125;
		return new Medida(valorG, 'G');
	}
 
	public static Medida pintasToLitros(Medida pintas) {
		double valorL = pintas.getValor() * 0.473176;
		return new Medida(valorL, 'L');
	}
 
}

Y aquí una clase Menu.
Solo tiene opciones para los dos métodos que puse de ejemplo.
Aunque no sea obligatorio, le he puesto un try catch para controlar posibles excepciones al introducir valores.
Así evitamos que el programa se interrumpa si se introducen letras. O si hay algún problema al meter valores decimales, ya que dependiendo del sistema de cada uno, se usará puntos o comas decimales.
En mi caso por ejemplo, lo valores se imprimen en pantalla con coma decimal, pero tengo que introducirlos con punto decimal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class Menu {
 
	public static void main(String[] args) {
		Scanner teclado = new Scanner(System.in);
		int opcion = 0;
 
		do {
			System.out.println("\n\tCONVERSIONES");
			System.out.println("\t------------\n");
			System.out.println("[1] -- Pintas a Galones");
			System.out.println("[2] -- Pintas a Litros");
			System.out.println("[9] -- TERMINAR PROGRAMA");
			System.out.print("Opcion: ");
			opcion = Integer.parseInt(teclado.nextLine());
 
			try {
				switch(opcion) {
				case 1:	//De pintas a galones
					System.out.println("\nIntroduzca valor en PINTAS.");
					System.out.print("Valor: ");
					double valorP_G = Double.parseDouble(teclado.nextLine());
					Medida P_G = new Medida(valorP_G, 'P');
					Medida G_P = Conversor.pintasToGalones(P_G);
					System.out.println(P_G + " equivalen a " + G_P);
					break;
				case 2:	//De pintas a litros
					System.out.println("\nIntroduzca valor en PINTAS.");
					System.out.print("Valor: ");
					double valorP_L = Double.parseDouble(teclado.nextLine());
					Medida P_L = new Medida(valorP_L, 'P');
					Medida L_P = Conversor.pintasToLitros(P_L);
					System.out.println(P_L + " equivalen a " + L_P);
					break;
				case 9:
					System.out.println("\n\t\tFIN DE PROGRAMA");
					break;
				default:
					System.out.println("Opción incorrecta");
				}
			}
			catch(Exception ex) {
				System.out.println("\nERROR en el valor de entrada.");
				System.out.println("Introduzca solo valores numéricos.");
				System.out.println("Compruebe si su sistema usa punto o coma decimal");
			}
 
		}while(opcion != 9);
		teclado.close();
 
	}
 
}

Un ejemplo de ejecución en pantalla:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
CONVERSIONES
	------------
 
[1] -- Pintas a Galones
[2] -- Pintas a Litros
[9] -- TERMINAR PROGRAMA
Opcion: 1
 
Introduzca valor en PINTAS.
Valor: 20.96
20,96 Pintas equivalen a 2,62 Galones
 
	CONVERSIONES
	------------
 
[1] -- Pintas a Galones
[2] -- Pintas a Litros
[9] -- TERMINAR PROGRAMA
Opcion: 2
 
Introduzca valor en PINTAS.
Valor: 13,90
 
ERROR en el valor de entrada.
Introduzca solo valores numéricos.
Compruebe si su sistema usa punto o coma decimal
 
	CONVERSIONES
	------------
 
[1] -- Pintas a Galones
[2] -- Pintas a Litros
[9] -- TERMINAR PROGRAMA
Opcion: 2
 
Introduzca valor en PINTAS.
Valor: 13.90
13,90 Pintas equivalen a 6,58 Litros
 
	CONVERSIONES
	------------
 
[1] -- Pintas a Galones
[2] -- Pintas a Litros
[9] -- TERMINAR PROGRAMA
Opcion: 9
 
		FIN DE PROGRAMA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar