Hacer una lista con arreglos en Java

Iniciado por sakura_, 14 Noviembre 2010, 21:20 PM

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

sakura_

Hola!
Soy nueva en este foro y también la programacion con Java. No sé si en el titulo me explique bien pero se los pongo mas detallado.

Tengo que hacer un programa que solicite el nombre de 5 vendedores que venden 3 tipos de productos. Para esto declaré un arreglos multidimensional, creo que hasta aqui voy bien (de no ser así corrijanme por favor!)

Habiendo capturado estos datos, se tiene que hacer el calculo de que vendedor tiene mas ventas y en que producto. Pensaba mandar a llamar o acceder a los productos de cada vendedor en particular y sumarlos, lo mas obvio lo sé, pero con el arreglo no se me ocurre como hacerlo, por eso pensé en hacer una lista, o mandar llamar otro objeto pero hasta ahora nada me ha funcionado.

Les dejo lo que llevo hasta ahora.

import java.io.*;

class tablaproduc {
    InputStreamReader isr = new InputStreamReader (System.in);
      BufferedReader flujoE = new BufferedReader (isr);
String vend[] = new String [5];
int prod [][] = new int [5][3];
float totv []=new float[5];

int x, z;
float ventas=0;

public tablaproduc(){

for (x=0; x<5; x=x+1){
for (z=0; z<3; z=z+1){
   

    vend[x]="";
    prod[x][z]=0;
    totv[x]=0;
   
  }
}
}

public void burbuja(){
    String tempvend="";
    int tempprod=0, pasada=0;
    float temptotv;
   
    for (pasada=1;pasada<5; pasada=pasada+1){
       for (x=0; x<4; x=x+1){
       for (z=0; z<2; z=z+1){
           
               tempvend=vend[x];
               tempprod =prod[x][z];
               temptotv=totv[x];
             
               vend[x]=vend[x+1];
               prod[x][z]=prod[x][z+1];
               totv[x]=totv[x+1];

               vend[x+1]=tempvend;
               prod[x][z+1]=tempprod;
               totv[x+1]=temptotv;
             
          }
           }
    }
   }

public void muestra (){
   
      System.out.println("Datos de ventas:");
    for (x=0; x<5; x=x+1){
    for (z=0; z<3; z=z+1){
        System.out.println(vend[x]+"  "+prod[x][z]);
    System.out.println("\t"+"El total de ventas es de:"+ventas);
    }
    }
   
}

public void calcula (){
    for (x=0; x<5; x=x+1){
    for (z=0; z<3; z=z+1){
      ventas=ventas+totv[x];
     }
}
}

public void captura (){

       for(x=0;x<5;x=x+1){
     for(z=0;z<3;z=z+1){
   
  try {

   System.out.println("Ingrese nombre de vendedor:");   
   vend[x]=flujoE.readLine();
    System.out.println("Ingrese el producto:");
     prod[x][z]=Integer.parseInt(flujoE.readLine());
     totv[x]=(vend[x]);}
    catch(IOException e) {}

}
}
}

}

/**
*
* @author sakura_
*/
public class proyecto {


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
     tablaproduc datos= new tablaproduc();
         datos.captura();
         datos.calcula();
         datos.muestra();
         datos.burbuja();
     
   
     // TODO code application logic here
    }

}[code=java]
[/code]

También ahi están mis intentos de hacer la suma, pero obviamente no salen.

De antemano gracias por cualquier ayuda que me puedan dar!  ;D

KuraraGNU

A ver, he intentado leer tu programa, pero me lía mucho, si me lo explicas, quizás lo entienda. Creo que te pasas de poner arrays, desde mi opinión, sólo hace falta una, que es la de los productos, yo haría esto:

Clase Productos

  • String Nombre
  • Float Precio
  • Int Cantidad

Clase Vendedor

  • String Nombre
  • Productos[] prod

El número de productos, lo introduces por teclado
Código (java) [Seleccionar]
p = flujoE.readline()//(O el metodo que tengas para leer int, sino le haces un cast)
prod = new Productos[p];


Y ya a partir de ahí llamas al constructor que hallas creado en Productos y le metes al vector prod[] los objetos Productos.

Clase Test(Main)
Aquí haces los cálculos que tengas que hacer, creas vendedores si quieres (pues cada vendedor ya vendrá con su producto) y ya haces las sumas. Si quieres que los productos se llamen igual para todos los vendedores, crea un objeto producto común para todos y se lo metes como parámetro y modificas la cantidad desde el método de cambiar cantidad de la clase Productos (ya que el campo es privado).


Si quieres te pongo más cosas, pero creo que con eso ya sabrías tú hacerlo, si no te parece bien mi idea y prefieres seguir haciéndolo de la forma en la que lo estás haciendo, explícamela porque no la entiendo :P


Yo suelo ser de complicar mucho el código, pero bueno, intento ayudar en lo que puedo ^^

sakura_

A lo que estoy viendo, creo que si sería muchisimo mas facil hacerlo como dices tú.
Pero a falta de tiempo creo que primero tratare de terminar el codigo asi como lo tengo ahorita para despues mejorarlo (aun me falta el trabajo final, asi que tendre chance de hacerlo xD)

Hubo algo que no entendí de tu ecplicacion.

CitarSi quieres que los productos se llamen igual para todos los vendedores, crea un objeto producto común para todos y se lo metes como parámetro y modificas la cantidad desde el método de cambiar cantidad de la clase Productos (ya que el campo es privado).

Eso me sería muy util, pero no entiendo como o.o

Mi codigo hasta ahora va así:

import java.io.*;

class tablaproduc {
    InputStreamReader isr = new InputStreamReader (System.in);
      BufferedReader flujoE = new BufferedReader (isr);
String vend[] = new String [5];
int prod[][] = new int [5][3];
float totv []=new float[5];
float mayor[] = new float[5];
float menor[]= new float[5];

int x, z;
float orden = 0;

public tablaproduc(){
for (x=0; x<5; x=x+1){
vend[x]="";

for (z=0; z<3; z=z+1){
prod[x][z]=0;
}

totv[x]=0;
mayor[x]=0;
menor[x]=0;
}
}

public void burbuja(){
    String tempvend="";
    int tempprod=0, pasada=0;
    float temptotv;
    float tempmenor;

    for (pasada=1;pasada<5; pasada=pasada+1){
       for (x=0; x<4; x=x+1){
       for (z=0; z<2; z=z+1){

               tempvend=vend[x];
               tempprod =prod[x][z];
               temptotv=totv[x];
               tempmenor=menor[x];

               vend[x]=vend[x+1];
               prod[x][z]=prod[x][z+1];
               totv[x]=totv[x+1];
               menor[x]=menor[x+1];

               vend[x+1]=tempvend;
               prod[x][z+1]=tempprod;
               totv[x+1]=temptotv;
               menor[x+1]=tempmenor;

           }
           }

    }

   }

public void muestra (){

    System.out.println("Datos de ventas:");

    for (x=0; x<5; x=x+1){
    for (z=0; z<3; z=z+1){
    System.out.println(vend[x]+"  "+prod[x][z]);   

    }
    }
    for (x=0; x<5; x=x+1){
    System.out.println("\n"+"El total de ventas de"+" "+vend[x]+" "+"es de"+"\n"+totv[x]);
    System.out.println("\t"+"Su producto mas vendido es:"+mayor[x]);
    System.out.println("\t"+"El producto menos vendido es:"+menor[x]);

   }
for (x=0; x<5; x=x+1){
for (z=0; z<3; z=z+1){

System.out.println("El producto"+" "+prod[x][z]+" "+"fue vendido un total de:"+" "+orden);
}
}

}



public void calcularmayor(){

for (x=0; x<5; x=x+1){
for (z=0; z<3; z=z+1){
if(prod[x][z] > mayor[x]){
mayor[x] = prod[x][z];
}
}
}
}

public void calcularmenor(){

for (x=0; x<5; x=x+1){
for (z=0; z<3; z=z+1){
if(prod[x][z] < menor[x]){
menor[x] = prod[x][z];
}
}
}
}

public void calcularorden(){

int cantidad_numeros = 0;
for (x=0; x<5; x=x+1){
for (z=0; z<3; z=z+1){
orden += prod[x][z];
cantidad_numeros ++;
}
orden = (orden + cantidad_numeros);
}
}

public void captura (){

for(x=0;x<5;x=x+1){
try {
System.out.println("Ingrese nombre de vendedor:");
vend[x]=flujoE.readLine();
for(z=0;z<3;z=z+1){
System.out.println("Ingrese el producto:");
prod[x][z]=Integer.parseInt(flujoE.readLine());
totv[x]+=(float)(prod[x][z]);


}
}catch(IOException e) {}
}
}
}

/**
*
* @author sakura
*/
public class proyecto {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
     tablaproduc datos= new tablaproduc();
         datos.captura();
         datos.calcularmayor();
         datos.calcularmenor();
         datos.calcularorden();
         datos.muestra();
         datos.burbuja();

     // TODO code application logic here
    }

}


Lo que trato de hacer (olvidandome ya del otro problema, lo de hacer una lista) es calcular las ventas totales de cada vendedor, su producto con mas y menores ventas, ademas de cuantas veces se vendió ese producto en total.

Se supone que eso debería hacerlo hasta ahora, pero los metodos "calcularmenor" y "calcularorden" no me salen. Y necesito saber porque porque me falta agregar que producto tuvo menos ventas en total y acomodar a los vendedor por numero de ventas.

Yo sé (o creo tener la idea) de que con que me ayuden con los metodos que tengo bastaria para sacar lo que me hace falta. Así que con que me digan porque no me funciona lo que llevo hasta ahora lo agradecería mucho n.n

KuraraGNU

#3
Suponiendo que tengas el resto del código bien (que no lo he mirado):

Que raro ¿Y el calcularmayor sí te sale?

Es que, estás comparando un array de int y otro de float, no se si eso es posible, para comparar tienen que ser del mismo tipo (no se si se autocastea implícitamente).

Código (java) [Seleccionar]
public void calcularmayor()
{

   for (x=0; x<5; x=x+1)
   {
          for (z=0; z<3; z=z+1)
          {
           if(prod[x][z] > mayor[x]){
                mayor[x] = prod[x][z];
          }
   }
}

Y ya aparte de esto, yo no concivo(nunca lo he probado), que se compare una matriz de 2 elementos con una de 1 ¿Me puedes explicar qué es lo que hace internamente el programa cuando ocurre esto? Yo como persona no sabría compararlo :S ---> Ya me lo han explicado :P

16BITBoy

Sakura, no me he liado demasiado con el código como tu comprenderás es bastante largo y difícil de leer sin las tabulaciones, y no creo que hayas localizado un problema en concreto. Sin embargo mencionas lo de comprobar el menor y el mayor. Para calcular esas dos cosas debe hacerse lo siguiente según mis conocimientos, aunque pueda hacerse de otra forma:

--Mayor--

- Variable o matriz de variables mayores a cero
- Realizar la comprobación pertinente entre todos los valores, y asignar a la variable el valor que cumpla la condición.

Hasta aquí creo que has llegado, sino compruébalo, pero donde estoy seguro que fallas es en lo siguiente:

--Menor--

- Tener calculado el mayor / mayores en primer lugar.
- Asignar el/los valores mayores a los menores

- Realizar la comprobación pertinente entre todos los valores, y asignar a la variable el valor que cumpla la condición.

Si te fijas tienes inicializado a 0 los menores. No tiene sentido tener a 0 los menores en el momento de comprobar el menor.
Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".

sakura_

Listo, ya calcula el mayor y el menor. Gracias  ;D

Para terminar, solo debo poner en orden a los vendedores de acuerdo al numero de sus ventas. Creo que para mas facil debi haber hecho una clase unicamente de los productos como me lo habian dicho antes, pero con lo tengo, creen que se pueda hacer algo?

Esto hasta ahora: (El objeto "vendedormas" era para tratar de calcular eso)

import java.io.*;

class tablaproduc {
    InputStreamReader isr = new InputStreamReader (System.in);
      BufferedReader flujoE = new BufferedReader (isr);
String vend[] = new String [5];
int prod[][] = new int [5][3];
float totv []=new float[5];
float mayor[] = new float[5];
float menor[]= new float[5];
float prodt[] = new float [3];

int x, z;
float aux1=0;


public tablaproduc(){
for (x=0; x<5; x=x+1){
vend[x]="";


for (z=0; z<3; z=z+1){
prod[x][z]=0;
prodt[z]=0;
}

totv[x]=0;
mayor[x]=0;
menor[x]=x;

}
}

public void burbuja(){
    String tempvend="";
    int tempprod=0, pasada=0;
    float temptotv;
    float tempmenor;

    for (pasada=1;pasada<5; pasada=pasada+1){
       for (x=0; x<4; x=x+1){
       for (z=0; z<2; z=z+1){

               tempvend=vend[x];
               tempprod =prod[x][z];
               temptotv=totv[x];
               tempmenor=menor[x];

               vend[x]=vend[x+1];
               prod[x][z]=prod[x][z+1];
               totv[x]=totv[x+1];
               menor[x]=menor[x+1];

               vend[x+1]=tempvend;
               prod[x][z+1]=tempprod;
               totv[x+1]=temptotv;
               menor[x+1]=tempmenor;

           }
           }

    }

   }

public void muestra (){

    System.out.println("Datos de ventas:");

    for (x=0; x<5; x=x+1){
    for (z=0; z<3; z=z+1){
    System.out.println(vend[x]+"  "+prod[x][z]);   

    }
    }
    for (x=0; x<5; x=x+1){
    System.out.println("\n"+"El total de ventas de"+" "+vend[x]+" "+"es de"+"\n"+totv[x]);
    System.out.println("\t"+"Su producto mas vendido es:"+mayor[x]);
    System.out.println("\t"+"El producto menos vendido es:"+menor[x]);

   }
for (x=0; x<5; x=x+1){


System.out.println("El producto"+" "+vend[x]+" "+"fue vendido un total de");

}
  System.out.println("\t"+"El orden de los vendedores, de acuerdo a sus ventas, es el siguiente:");
 
 
    for (x=0; x<5; x=x+1){
        System.out.println(vend[x]+totv[x]);
       
   
     
   }
}


public void calcularmayor(){

for (x=0; x<5; x=x+1){
for (z=0; z<3; z=z+1){
if(prod[x][z] > mayor[x]){
mayor[x] = prod[x][z];
}
}
}
}

public void calcularmenor(){

for (x=0; x<5; x=x+1){
for (z=0; z<3; z=z+1){
if(prod[x][z] < menor[x]){
menor[x] = prod[x][z];
}
}
}
}


public void vendedormas(){

for (x=0; x<5; x=x+1){
for (z=0; z<3; z=z+1){
if (totv[x]<totv[z]){
aux1=totv[x];
totv[x]=totv[z];
totv[z]=aux1;
}
}
}
}



public void captura (){

for(x=0;x<5;x=x+1){
try {
System.out.println("Ingrese nombre de vendedor:");
vend[x]=flujoE.readLine();
for(z=0;z<3;z=z+1){
System.out.println("Ingrese el producto:");
prod[x][z]=Integer.parseInt(flujoE.readLine());
totv[x]+=(float)(prod[x][z]);



}
}catch(IOException e) {}
}
}
}

/**
*
* @author sakura
*/
public class proyecto {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
     tablaproduc datos= new tablaproduc();
         datos.captura();
         datos.calcularmayor();
         datos.calcularmenor();         
         datos.muestra();
         datos.burbuja();

     // TODO code application logic here
    }

}

raul338

Una pregunta, porque hacias z hasta 3 en el segundo bucle? Yo lo modifique asi, por ejemplo :)

Código (java) [Seleccionar]

public void vendedormas(){
  for (x=0; x<5; x++){
      for (z=x; z<5; z++){
          if (totv[x]<totv[z]){
              aux1=totv[x];
              totv[x]=totv[z];
              totv[z]=aux1;
          }
      }
  }
}