Autor
|
Tema: Hacer una lista con arreglos en Java (Leído 12,801 veces)
|
sakura_
Desconectado
Mensajes: 3
|
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!
|
|
|
En línea
|
|
|
|
KuraraGNU
Desconectado
Mensajes: 209
|
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 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 Yo suelo ser de complicar mucho el código, pero bueno, intento ayudar en lo que puedo ^^
|
|
|
En línea
|
|
|
|
sakura_
Desconectado
Mensajes: 3
|
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. 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). 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
|
|
|
En línea
|
|
|
|
KuraraGNU
Desconectado
Mensajes: 209
|
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). 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
|
|
« Última modificación: 16 Noviembre 2010, 11:05 am por KuraraGNU »
|
En línea
|
|
|
|
16BITBoy
Desconectado
Mensajes: 137
En mi pompa..
|
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.
|
|
|
En línea
|
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_
Desconectado
Mensajes: 3
|
Listo, ya calcula el mayor y el menor. Gracias 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 } }
|
|
|
En línea
|
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Una pregunta, porque hacias z hasta 3 en el segundo bucle? Yo lo modifique asi, por ejemplo 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; } } } }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
programacion en java con arreglos
Java
|
tav
|
4
|
3,668
|
30 Marzo 2012, 01:46 am
por Debci
|
|
|
COMO DECLARAR ARREGLOS EN JAVA
Java
|
jrkikey
|
3
|
3,032
|
27 Noviembre 2012, 09:34 am
por тαптяα
|
|
|
Ayuda con arreglos en java.
Java
|
iAlexisan
|
3
|
2,238
|
8 Diciembre 2015, 02:30 am
por iAlexisan
|
|
|
[C] Explicación de cómo hacer arreglos multidimensionales dinámicos
Programación C/C++
|
eenube
|
1
|
2,206
|
15 Marzo 2016, 18:41 pm
por MAFUS
|
|
|
java pregunte sobre una lista. urgente!
Java
|
ocarro
|
1
|
2,632
|
12 Julio 2017, 16:47 pm
por Zune528
|
|