Sacar el promedio de un arrar

Iniciado por Sempai15, 17 Julio 2016, 00:13 AM

0 Miembros y 1 Visitante están viendo este tema.

Octsam


Si entiendo que quieres hacer una lista, pero no sé si el mismo producto tiene el mismo precio, en cuyo caso no tiene sentido hacer un promedio, pues sería el precio que tienen en común; o si como sugiere ahora tu ejemplo hay varios productos con el mismo nombre y precios distintos, y quieres obtener el promedio.


Sempai15

Es el mismo pruducto pero sumando su promedio general es decir cantidad x precio

hectornunezrivas

Hola.
Bueno para sacar el promedio de tu array es tomar la suma de todos los totales de los productos entre cuantos productos se agregaron. y en este caso quedaría:
return suma / vec.length;
Ya que vec.length te trae el tamaño del arreglo

Octsam


¡Ufff! Creo que por fin me he enterado, aunque el modo de expresarlo es confuso: si para cada unidad de un mismo producto sumas el promedio a una variable de valor inicial 0, entiendo que no hace falta calcularlo, pues el promedio por el número de unidades, es la suma total de precios. Por ejemplo, si un alumno en matemáticas ha obtenido como notas 5, 7 y 8, el promedio es (5 + 7 + 8)/3 = 20/3 = 6'66..., y 20/3 + 20/3 + 20/3 = 20/3 · 3 = 20, que es la suma total, por lo que habría bastado calcular 5 + 7 + 8 = 20 directamente.

El método siguiente imprimirá los datos como en el ejemplo que has dado, pues dar la lista de promedios sin más, no me parece útil.
El código lo he escrito aquí directamente, por lo que debe ser probado para asegurar su corrección.



    // Este objeto es de una clase anónima. Es definido fuera de la función, para no
    // tener que hacer el objeto en cada llamada al método.
    private Comparator<venta> comp = new Comparator<>(){
        @Override
        public int compare(venta prod1, venta prod2){
            return prod1.nombreProducto.compareTo(prod2.nombreProducto);
        }
    };
   
   
    public void getPromedioGeneral(venta[] vec){
        // Si no hay elementos que imprimir, ésto hará terminar al método.
        if(vec.length == 0){ return; }
       
        // Esto ordenará los productos según su nombre.
        Arrays.sort(vec, comp);
       
        venta producto = vec[0], producto2;
        double promedio = producto.precio, cont = 1d;
        int i = 0;
        while(++i < vec.length){
            producto2 = vec[i];
            if(producto.nombreProducto.equals(producto2.nombreProducto)){
                promedio += producto2.precio;
                ++cont;
            }
            else{
                if(cont > 1){ promedio /= cont; }
                System.out.println(producto.nombreProducto+": "+promedio);
                producto = producto2;
                promedio = producto2.precio;
                cont = 1d;
            }
        }
       
        // Como el bucle imprime un producto, cuando aparece otro solamente, faltará el
        // último producto registrado en la variable 'producto'.
        if(cont > 1){ promedio /= cont; }
        System.out.println(producto.nombreProducto+": "+promedio);
    }
   



Y los programadores suelen poner nombres a las clases, con una letra mayúscula inicial, para distinguirlos mejor de los nombres de variables. Si haces programas menos sencillos, sería bueno que tengas esa costumbre.


Sempai15


nelmaster_vc

#15
lol