Java - Menú con distintas ejecuciones en java

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Menú con distintas ejecuciones en java

Publicado por Ivan (6 intervenciones) el 17/12/2018 21:08:21
Hola chicos, estoy haciendo un ejercicio de clase, os pongo el enunciado y os explico.

Realizar un programa que nos permita aceptar números mayores o iguales a cero por teclado hasta que se introduzca un número negativo. En ese momento se verá en pantalla el siguiente menú: 1-Suma de los números pares introducidos.

2-Media de los números pares introducidos. (con dos decimales)

3-Mayor nº impar introducido.

4-Cuántos números hemos introducido.

5-Cuantos números de los introducidos han sido ceros, cuántos han sido pares y cuantos impares.

6.-Salir.

El menú (con los valores ya introducidos) se repetirá hasta que el usuario decida “Salir”.

En el paso primero no se si tengo que acumular los números introducidos, yo he puesto que sea así, aun que igual lo tengo mal, los he guardado en un array para el menú. La cosa es que estoy intentando hacer el switch con el menu, pero no se como hacer esas operaciones, si van dentro del case o fuera. Mi segunda duda es como visualizar las opciones para el que usuario antes de dar en alguna, vea lo que hace previamente.os dejo lo que he hecho.

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
public class Ejercicio4 {
 
    public static void main(String[] args) {
        System.out.println("Progama que nos permite aceptar numeros mayores o iguales a cero y si no, aparecerá un menú.");
        System.out.println("----------------------------------------------------------------------------------------------------------------------------------------\n");
        Scanner teclado;
        int numero;
        List lista = new ArrayList();
 
        int salir = 6;
        int opcion = 0;
        try {
            System.out.print("Introduce un número: ");
            teclado = new Scanner(System.in);
            numero = teclado.nextInt();
            do {
 
                lista.add(numero);
            } while (numero >= 0);
            if (numero < 0) {
                while (opcion != salir) {
                    System.out.print("Elige una opción: ");
 
                    switch (opcion) {
                        //1-Suma de los números pares introducidos
                        case 1:
                        System.out.print("La suma de los números pares introducidos son" +(lista%2==0) +lista);
                        break;
 
                        //2-Media de los números pares introducidos. (con dos decimales)
                        case 2: break;
                        //3-Mayor nº impar introducido.
                        case 3: break;
                        //4-Cuántos números hemos introducido.
                        case 4: break;
                        //5-Cuantos números de los introducidos han sido ceros, cuántos han sido pares y cuantos impares.
                        case 5: break;
                        //6.-Salir.
                        case 6: break;
                    }
                }
 
            }
        } catch (InputMismatchException ime) {
            System.out.println("¡Cuidado! Solo puedes insertar números. ");
 
        }
 
    }
 
}
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

Menú con distintas ejecuciones en java

Publicado por Kabuto (1381 intervenciones) el 18/12/2018 02:17:53
Hola, no he probado tu código pero ya he visto algo que me temo va a hacer que no funcione.

Este bucle:
1
2
3
4
do {
 
    lista.add(numero);
} while (numero >= 0);

Puesto que dentro del bucle, el valor de numero no va a cambiar, el bucle se va a repetir infinitamente, porque SIEMPRE va a ser mayor o igual que 0, ya que, repito, el valor de numero no cambiar dentro del bucle. Así que una vez ha entrado, no va a poder salir de él.

Por otra parte, puedes usar algún tipo de coleccion para guardar los numeros, como ArrayList y tal... pero en realidad no lo necesitas. Basta con definir distintas variables "contadores" y "acumuladores", según lo que pide el enunciado, y cada vez que el usuario introduce un número, lo analizas para saber si es positivo o negativo, si es par o impar, si es cero o no... y actuas en consecuencia, para luego pedir el siguiente número.

Otra cosa, no se si ya has empezado a trabajar con métodos. Yo te voy a proponer un código usando un par de metodos para reducir el código en el main(), de este modo se entiende mejor y es más fácil entenderlo.
Si aún no estás trabajando con metodos, igualmente se puede transformar fácilmente mi código a una versión sin métodos.

En mi código, lo que hago es crear un método, que retorna un boolean, que se va a encargar sola y únicamente de pedir numeros, analizarlos y procesarlos.
Si el numero introudcido es positivo, tras procesarlo, retornará TRUE para que un bucle en el main sepa que tiene que repetirlo para pedir más números al usuario.
Si se introduce un número negativo, se retorna FALSE inmediatamente para que el bucle del main finalice y pasemos al siguiente menu del programa.

El otro método, no hace nada especial, tan solo mostrar el menu de opciones en pantalla. Es simplemente para aligerar el código del metodo main() y que no sea demasiado largo y farragoso de leer.

De este modo, el main prácticamente solo tiene un pequeño bucle, para pedir numeros y otro bucle para mostrar el menu, pedir opcion y procesar la opcion elegida con un switch.

Por último, para facilitar el poder trabajar con métodos, las principales variables las he declarado como "globales", es decir, están fuera del metodo main(), como si fuesen atributos de clase.
Esto posibilita que estas variables sean visibles para todos los métodos y puedan utilizarlas. De lo contrario, habría que pasarlas por parámetros y sería más problemático.

Pego aquí el código completo, incluye varios comentarios explicando. Creo que se entiende bien lo que hace, en cualquier caso, no dudes en preguntar.
Un saludo.

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import java.util.Scanner;
 
public class Insertar {
 
	static Scanner teclado = new Scanner(System.in);
 
	//Variables necesarias
	static int sumaPares = 0; //Para sumar pares introducidos
	static int cuentaPares = 0; //Para contar los pares introducidos, necesario para calcular la media
	static int mayorImpar = 0; //Para guardar el impar mayor
	static int cuentaImpares = 0; //Para contar los impares introducidos
	static int cuentaNumeros = 0; //Para contar TODOS los numeros introducios
	static int cuentaCeros = 0; //Para contar los ceros introducidos
 
	public static void main(String[] args) {
		//Mostramos cabecera inicial
		System.out.println("Programa que nos permite aceptar numeros mayores o iguales a cero "
				+ "y si no, aparecerá un menú.");
		System.out.println("-------------------------------------------------------------------"
				+ "------------------------------------------------------------\n");
 
		//Pedimos numeros
		while(pedirNumeros()); //Esto se repite hasta que el metodo retorne FALSE
 
		//Finalizado el proceso de pedir datos, mostramos menu opciones
		int opcion = 0;
		while (opcion != 6)
		{
			menu();
			System.out.print("Elija opcion: ");
			opcion = teclado.nextInt();
			switch (opcion)
			{
			case 1:
				System.out.printf("\nLa suma de pares introducidos es: %d \n\n ", sumaPares);
				break;
			case 2:
				double mediaPares = sumaPares / cuentaPares;
				System.out.printf("\nLa media de pares introducidos es: %.2f \n\n", mediaPares);
				break;
			case 3:
				System.out.printf("\nEl mayor impar introducido es: %d \n\n", mayorImpar);
				break;
			case 4:
				System.out.printf("\nSe han introducido %d numeros en total.\n\n", cuentaNumeros);
				break;
			case 5:
				System.out.printf("\nCantidad de ceros introducidos: %d", cuentaCeros);
				System.out.printf("\nCantidad de pares introducidos: %d", cuentaPares);
				System.out.printf("\nCantidad de impares introducidos: %d \n\n", cuentaImpares);
				break;
			case 6:
				System.out.println("\n\t\tFIN DE PROGRAMA");
				break;
			default:
				System.out.println("\nLa opcion no es valida....\n\n");
			}
		}
 
 
	}
	/*
	 * Pide numeros al usuario.
	 * Si el usuario introduce un negativo, este metodo devoverá FALSE
	 * para que el main() deje de pedir numeros.
	 */
	static boolean pedirNumeros()
	{
		System.out.print("Introduzca numero: ");
		int numero = teclado.nextInt();
		if (numero < 0) //Es un negativo, ponemos fin al proceso de pedir numeros retornando false
			return false;
		else //Es positivo, analizaremos numero y retornaremos true para continuar con el proceso de pedir numeros
		{
			cuentaNumeros++; //Contamos el numero introducido
			if (numero % 2 != 0) //Es impar
			{
				cuentaImpares++;
				if (numero > mayorImpar)
					mayorImpar = numero;
			}
			else //Es par. Además podría ser un 0
			{
				cuentaPares++;
				sumaPares += numero;
				if (numero == 0)
					cuentaCeros++;
			}
			return true; //El main() seguirá pidiendo otro numero
		}
	}
 
	/*
	 * Muestra el menu de opciones al usuario
	 */
	static void menu()
	{
		System.out.println("\n\t\tMENU OPCIONES");
		System.out.println("\t\t---- --------\n");
		System.out.println("1- Mostrar suma de los pares introducidos");
		System.out.println("2- Mostrar media de los pares introducidos");
		System.out.println("3- Mostrar mayor impar introducido");
		System.out.println("4- Mostrar cantidad de numeros introducidos");
		System.out.println("5- Mostrar cantidad de ceros, de pares y de impares");
		System.out.println("6- TERMINAR PROGRAMA\n");
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar