Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Sempai15 en 17 Julio 2016, 00:13 am



Título: Sacar el promedio de un arrar
Publicado por: Sempai15 en 17 Julio 2016, 00:13 am
Tengo un problema me pide hacer un metodo que retorne el promedio segun el tipo de producto, el codigo le tengo así:

public class venta {

    private String nombreProducto;
    private double precio;
    private int cantidad;

    public venta(String nombreProducto, double precio, int cantidad) {
        this.nombreProducto = nombreProducto;
        this.precio = precio;
        this.cantidad = cantidad;
    }

    public String getNombreProducto() {
        return nombreProducto;
    }

    public void setNombreProducto(String nombreProducto) {
        this.nombreProducto = nombreProducto;
    }

    public double getPrecio() {
        return precio;
    }

    public void setPrecio(double precio) {
        this.precio = precio;
    }

    public int getCantidad() {
        return cantidad;
    }

    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }

    public double getTotal() {
        return cantidad * precio;
    }       

    @Override
    public String toString() {
        return nombreProducto+getTotal();
    }
     
y el de generar le tengo asi:
   public double getPromedioGeneral(venta[] vec) {
        double suma = 0;
        int pos = 0;
        int conta = 0;
        String dato = "";
        double valorMayor = vec[0].getTotal();
        for (int i = 0; i < vec.length; i++) {
            if (dato.equals(vec.getNombreProducto())) {
                suma = suma + vec.getTotal();
                conta++;
            }
        }
        return suma / conta;
    }

Necesito ayuda por favor.


Título: Re: Sacar el promedio de un arrar
Publicado por: + 1 Oculto(s) en 17 Julio 2016, 14:53 pm
suma todo el array y luego divides por la cantidad total del array


Título: Re: Sacar el promedio de un arrar
Publicado por: Thanos en 17 Julio 2016, 16:24 pm
Prueba a quitar el condicional if del bucle de getPromedioGeneral().


Título: Re: Sacar el promedio de un arrar
Publicado por: FermatsTheorem en 17 Julio 2016, 19:10 pm
Podrías publicar el enunciado completo del problema? No termino de entender lo de sacar promedio según tipo de producto.

Gracias.


Título: Re: Sacar el promedio de un arrar
Publicado por: Sempai15 en 17 Julio 2016, 23:14 pm
Hacer un metodo en la cual me retorne un promedio segun el tipo de producto; es decir imprimir todos los productos con sus promedios y en caso de que se repita un producto sumar los dos repetidos.


Título: Re: Sacar el promedio de un arrar
Publicado por: FermatsTheorem en 17 Julio 2016, 23:28 pm
Sigo sin entender del todo como es el problema.

Dado un vector de productos, tenés que calcular el porcentaje de aparición de cada uno en el vector?

A que te referís con sumarlos en caso de que se repitan?


Título: Re: Sacar el promedio de un arrar
Publicado por: Sempai15 en 17 Julio 2016, 23:43 pm
Es decir tengo 6 productos vendidos mediante factura: tablet, pc, mouse, teclado y dos de ellos se repitan y es la flash entonces para evitarme poner ambas la hago en uno solo.


Título: Re: Sacar el promedio de un arrar
Publicado por: Thanos en 18 Julio 2016, 18:29 pm
A ver, el String dato vale siempre "".

Si quieres que calcule el promedio de un tipo de producto pasale un String al método con el nombre del producto, ademas del array de ventas.


Título: Re: Sacar el promedio de un arrar
Publicado por: Octsam en 19 Julio 2016, 10:07 am

Si lo he entendido bien, quieres considerar como agrupados los productos iguales dentro de la colección (= array), y dar el promedio de su precio. Por ello:

   1) Entiendo que si dos productos son iguales, su precio es el mismo, por lo que su promedio es su precio, a no ser que éste varíe con el tiempo.

   2) Si quieres calcular el porcentaje de facturación que ha supuesto la venta del producto, éso sí requiere hacer algo del estilo de lo que has puesto.

   3) En cualquiera de los dos casos, lo más eficiente y sencillo es ordenar los elementos de la colección, para que al hallar un nombre distinto, no sea necesario considerar más veces la clase de producto ya tratado, pues ya habrán sido tratados todos.

Una vez que sepa bien qué quieres, podría darte el código que yo propongo para resolver tu problema, pero es mejor que lo hagas tú, o al menos lo intentes. Aprender a programar bien es difícil, requiere mucho esfuerzo y no siempre podrás hallar a otro para que te lo haga.


Título: Re: Sacar el promedio de un arrar
Publicado por: Sempai15 en 19 Julio 2016, 23:37 pm
Es imprimir así con un método:
producto y promedio
Disco: 500.00
RAM: 400.00
Flash: 250.00
Teclado: 500.00
Tablet: 680.00


Título: Re: Sacar el promedio de un arrar
Publicado por: Octsam en 21 Julio 2016, 14:09 pm

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.



Título: Re: Sacar el promedio de un arrar
Publicado por: Sempai15 en 21 Julio 2016, 15:58 pm
Es el mismo pruducto pero sumando su promedio general es decir cantidad x precio


Título: Re: Sacar el promedio de un arrar
Publicado por: hectornunezrivas en 25 Julio 2016, 19:24 pm
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


Título: Re: Sacar el promedio de un arrar
Publicado por: Octsam en 26 Julio 2016, 10:50 am

¡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.

Código:

    // 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.



Título: Re: Sacar el promedio de un arrar
Publicado por: Sempai15 en 26 Julio 2016, 16:35 pm
Muchas gracias ^w^


Título: Re: Sacar el promedio de un arrar
Publicado por: nelmaster_vc en 28 Julio 2016, 02:39 am
lol