Java - Metodo que imprima el promedio de tallas por edades

 
Vista:

Metodo que imprima el promedio de tallas por edades

Publicado por Miguel Rojas (2 intervenciones) el 04/11/2020 18:31:51
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
public String promedioTallaporEdad() {
 
    float suma = 0, promedio = 0;
    int n = 0, x = 1, y = 0;
 
    for (int i = 0; i < ListaI.size(); i++) {
        n = ListaI.get(i).getEdad();
        suma = ListaI.get(i).getTalla();
 
        for (int k = i; k == 0; k--) {           //ESTE FOR ME DA ERROR
            if (n == ListaI.get(k - 1).getEdad()) {
                y++;
            }
        }
 
        if (y == 0) {
            for (int j = i + 1; j < ListaI.size(); j++) {       //calculando el promedio del numero n
                if (n == ListaI.get(j).getEdad()) {
                    x++;
                    suma = suma + ListaI.get(j).getTalla();
                }
            }
            promedio = suma / x;
            return "Edad: " + n + " Promedio de tallas " + promedio;
 
        } else {
            i++;
        }
 
    }
    return "hola";
}

Hola buenas tardes cree este metodo que debe impirmir el promedio de las tallas por cada edad que exista en el arrayList, por ejemplo: Edad 5años Promedio de tallas: 20.5 tomando en cuenta que hallan varias edades iguales a 5.
El problema es que en el for de la variable k me da error no se porque. Ese for lo que hace es verificar que la edad en la que se encuentra la i no halla estado antes y no vaya a sacarle promedio porque se saco anteriormente. Y el otro problema es que no se que retornarle en donde puse hola
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Metodo que imprima el promedio de tallas por edades

Publicado por Rodrigo (623 intervenciones) el 05/11/2020 00:27:51
Sugiero que indiques que error te da. Decir que "te da error" no ayuda mucho a ayudarte.

Por otro lado, sugiero cambies k == 0, por k >= 0, a menos que quieras que el ciclo solo se ejecute cuando k == 0, 1 sola vez y nunca mas. Sospecho que no es asi, por lo que creo que deberias cambiar la condicion a algo como k >= 0.

Sugiero uses nombres mas descriptivos, Usar "x" "y" no explican que es lo que guardas o calculas en "x" o "y". Los indices estan bien con nombres cortos, como i, j. k, pero no variables mas significativas.

En la linea 27 incrementas i, y cada vuelta del ciclo tambien lo hace. Es lo que quieres?

Si la mision del metodo es solo imprimir cosas, haz que el tipo de retorno sea void, y no hagas return al final.
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
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Metodo que imprima el promedio de tallas por edades

Publicado por Billy Joel (875 intervenciones) el 05/11/2020 00:48:54
El for que te está dando problema lo cambiaría por
1
for (int k = i; k > 0; k--) {

Pero por el enunciado que tienes no creo que tu método funcione ya que tienes returns dentro de los for por lo que no se recorre toda la lista.
De todas formas he resuelto el enunciado así
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static String promedioTallasPorEdad(){
    String promedios = "";
    Map<Integer, List<Float>> edades = new HashMap();
    for (int i = 0; i < ListaI.size(); i++) {
        //Si la edad no está registrada en el mapa entonces se registra con su correspondiente lista
        if(edades.get(ListaI.get(i).getEdad()) == null){
            edades.put(ListaI.get(i).getEdad(), new ArrayList());
        }
        //Busca la edad en el mapa y añade la talla a su correspondiente lista
        edades.get(ListaI.get(i).getEdad())
                .add(ListaI.get(i).getTalla());
    }
 
    //Con las tallas separadas por listas de edades vamos a calcular los promedios de tallas por edades
    for(Integer edad : edades.keySet()){
        float suma = 0;
        for(float talla : edades.get(edad)){
            suma += talla;
        }
        //Acumulamos el resultado de los promedios en la variable promedios
        promedios += "Edad: " + edad + " Promedio de tallas "  + String.format("%.02f" ,(suma / edades.get(edad).size())) + "\n";
    }
    return promedios;
}

Prueblao y me comentas. Si no entiendes algo entonces también comenta.
Saludos,
Billy Joel
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