Java - Problema con ejercicio bucles y condicionales.

 
Vista:

Problema con ejercicio bucles y condicionales.

Publicado por Arkaitz (2 intervenciones) el 16/12/2015 16:05:44
Buenos dias, estoy desde hace poco estudiando un grado de programacion a distancia, y ahora mismo se me esta atragantando un ejercicio, que es el siguiente:

Ejercicio 4: Realizar un programa que nos permita aceptar números mayores o iguales a cero por teclado hasta que se introduzca un número negativo y nos visualice 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.

En principio se que debo crear un bucle do while para que el usuario siga introduciendo numeros hasta que introduzca un numero negativo, pero a partir de esto tan basico no se como continuar, si alguien puede arrojar algo de luz estaria muy agradecido.
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 Jordi

Problema con ejercicio bucles y condicionales.

Publicado por Jordi (38 intervenciones) el 16/12/2015 22:11:03
Hola Arkaitz,

Tienes 2 opciones así a grandes rasgos para hacerlo: con un ArrayList o sin él.

Si lo haces con ArrayList, coges todos los valores que se van introduciendo y luego haces los cálculos necesarios según la opción del menú escogida.

Si lo haces sin, no te queda otra que ir calculando todo con varios contadores sobre la marcha para dar la respuesta que te pidan.

Si necesitas algo más de información de alguna de las dos opciones, o algo de código, ya dirás. ;)
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
sin imagen de perfil

Problema con ejercicio bucles y condicionales.

Publicado por valeriano (2 intervenciones) el 17/12/2015 10:41:35
Nos podías dar algunas pistas sobre el código. Creo que debemos trabajar con estructuras reiterativas como for, while, etc.
Estoy en el mismo lugar que el compañero que te ha enviado la información sobre el problema.
Gracias.
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

Problema con ejercicio bucles y condicionales.

Publicado por Arkaitz (2 intervenciones) el 17/12/2015 18:17:44
Gracias por responder Jordi, al final me he apañado usando if, y bucles while para ir contando y almacenando los numeros en diferentes variables, me ha costado pero he dado con ello y parece que todo funciona.
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
sin imagen de perfil

Problema con ejercicio bucles y condicionales.

Publicado por valeriano (2 intervenciones) el 17/12/2015 23:18:19
Me lo podías enviar.
Muchas gracias.
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
sin imagen de perfil
Val: 144
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con ejercicio bucles y condicionales.

Publicado por Thanatos (97 intervenciones) el 18/12/2015 10:37:25
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
 
class Estudio {
 
    public static void main(String[] args) {
        ArrayList<Integer> lista = new ArrayList<Integer>();
        Scanner sc = new Scanner(System.in);
        int entrada = 0;
 
        System.out.println("Ingrese un grupo de numeros enteros:");
        do {
            entrada = sc.nextInt();
            if (entrada >= 0) {
                lista.add(entrada);
            } else {
                lista.trimToSize();
                break;
            }
        } while (true);
 
        if (!lista.isEmpty()) {
            realizarOperaciones(lista, entrada);
        } else {
            System.out.println("\n * No se ha ingresado ningun dato *\n");
        }
    }
 
 
    private static void mostrarMenu() {
        String menu = String.format("\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",
            "* * * * * * * * * * * * * * * * * * * * * * * * * * *",
            "*                                                   *",
            "*    1. Suma de los numeros pares introducidos.     *",
            "*    2. Media de los numeros pares introducidos.    *",
            "*    3. Mayor numero impar introducido.             *",
            "*    4. Cantidad de numeros introducidos.           *",
            "*    5. Cantidad de ceros, pares e impares.         *",
            "*    6. Salir.                                      *",
            "*                                                   *",
            "* * * * * * * * * * * * * * * * * * * * * * * * * * *",
            "opcion = "
        );
        System.out.print(menu);
    }
 
 
    private static void realizarOperaciones(ArrayList<Integer> lista, int entrada) {
        Scanner sc = new Scanner(System.in);
        int[] cantidades;
 
        do {
            mostrarMenu();
            entrada = sc.nextInt();
            System.out.println();
            switch (entrada) {
                case 1:
                    System.out.println("\t\t   suma = " + sumarPares(lista));
                    break;
                case 2:
                    System.out.printf("\t\t   media = %.2f\n", obtenerMediaPares(lista));
                    break;
                case 3:
                    if (obtenerMayorImpar(lista) == 0) {
                        System.out.println("\t   * No se encontro ningun impar *");
                    } else {
                        System.out.println("\t\t   mayor = " + obtenerMayorImpar(lista));
                    }
                    break;
                case 4:
                    System.out.println("\t\t   cantidad = " + lista.size());
                    break;
                case 5:
                    cantidades = obtenerCantidades(lista);
                    System.out.println(
                        "\t\t   ceros   =  " + cantidades[0] + '\n' +
                        "\t\t   pares   =  " + cantidades[1] + '\n' +
                        "\t\t   impares =  " + cantidades[2]
                    );
                    break;
                case 6:
                    System.out.println("\n\t       * Programa finalizado *\n");
                    break;
                default:
                    System.out.println("\n\t       * Opcion desconocida *\n");
                    break;
            }
            System.out.println();
        } while (entrada != 6);
    }
 
 
    private static int sumarPares(ArrayList<Integer> lista) {
        int suma = 0;
 
        for (int numero : lista) {
            if (numero % 2 == 0) {
                suma += numero;
            }
        }
        return suma;
    }
 
 
    private static float obtenerMediaPares(ArrayList<Integer> lista) {
        int indice = 0;
        int contadorPares = 0;
 
        while (indice < lista.size()) {
            if (lista.get(indice) % 2 == 0) {
                ++contadorPares;
            }
            ++indice;
        }
 
        if (contadorPares == 0) {
            return 0;
        } else {
            return (float)sumarPares(lista) / contadorPares;
        }
    }
 
 
    private static int obtenerMayorImpar(ArrayList<Integer> lista) {
        int mayorImpar = 0;
 
        Collections.sort(lista, Collections.reverseOrder());
        for (int numero : lista) {
            if (numero % 2 != 0) {
                mayorImpar = numero;
                break;
            }
        }
        return mayorImpar;
    }
 
 
    private static int[] obtenerCantidades(ArrayList<Integer> lista) {
        int[] cantidades = {0, 0, 0};
 
        for (int numero : lista) {
            if (numero == 0) {
                ++cantidades[0];  // ceros
            } else if (numero % 2 == 0) {
                ++cantidades[1];  // pares
            } else {
                ++cantidades[2];  // impares
            }
        }
        cantidades[1] += cantidades[0];  // el cero también es par
        return cantidades;
    }
 
}

Al código le falta controlar las excepciones en la entrada de datos y declarar como final algunas variables, pero espero que te sirva.
Saludos...
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