Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Dem0ny en 2 Febrero 2009, 11:07 am



Título: Problema al imprimir 2 vectores, con 2 bucles
Publicado por: Dem0ny en 2 Febrero 2009, 11:07 am
Tengo un problema con el siguiente codigo:

Código
  1. import java.util.*;
  2. class Ejercicio2{
  3. public static void main(String args[]){
  4.   String [] nombres={"Pedro","Francisco","Roberto","Manuel","Vicente","Luis","Juli","Aaron","Carlos"};
  5.   int [] puntuacion={10,3,2,6,2,3,4,5,2,3};
  6.  
  7.  
  8.   for(int j=0;j<puntuacion.length;j++){
  9.  
  10.   for(int i=0; i<nombres.length;i++){
  11.  
  12.  
  13.   System.out.println(" "+puntuacion[i]+ ""+nombres[j]);
  14.  
  15.   }
  16.                      }
  17.  
  18.   }
  19. }

El siguiente codigo quiero que ejecute, la correspodiente matriz unidimensional(vector) con cada uno de los nombres. Por ej. Pedro tendria la puntuación 10,  Francisco el 3, Roberto el 2, Manuel el 6... y que se impriman en dos columnas contiguas.


Me da fallo y el resultado del programa es una combinación de cada nombre con cada una de las puntuaciones. Tiene que ser algun fallo de concatenación de los dos bucles o algo por el estilo, pero que no soy capaz de dar con ello. Aver si alguno puede darme una orientación

Un saludo! Gracias de antemano


Título: Re: Problema al imprimir 2 vectores, con 2 bucles
Publicado por: Rayden_3000 en 2 Febrero 2009, 12:05 pm
Es porque estas haciendo un bucle continuo con los vectores...

No saldrá del primer valor hasta que se cumpla con la segunda condición... de lo contrario no saldrá y no tomará el siguiente valor, hasta (valga la redundancia) salga nuevamente...

Lo que tendrías que hacer es hacer un bucle y dentro de el imprimir los valores...

Saludos


Título: Re: Problema al imprimir 2 vectores, con 2 bucles
Publicado por: Dem0ny en 2 Febrero 2009, 12:25 pm
Entonces como sería, un bucle para cada vector?.

Aver, yo entiendo los 2 bucles tipo array bidimensional, va leyendo y le va asignando ... ej. posición 1, con posición 1 etc...

Por tanto sería hacer un bucle imprimiendo los nombres y otro imprimiendo puntuaciones?

El objetivo seria

Pedro 10
Francisco 3
Roberto 2
Manuel 6
Vicente 2
Luis 3
Juli 4
...
Aaron


Título: Re: Problema al imprimir 2 vectores, con 2 bucles
Publicado por: Hearts en 2 Febrero 2009, 12:51 pm
Tu array de puntuaciones es más grande que tu array de nombres, y deben ser iguales.


Título: Re: Problema al imprimir 2 vectores, con 2 bucles
Publicado por: Dem0ny en 2 Febrero 2009, 13:01 pm
A pesar de ese error me sale cada una de las puntuaciones con todos los users.

Ej.

Pedro 10
Francisco 10
Roberto 10
Manuel 10
Vicente 10
Luis 10
Juli 10

.....

y luego con otra puntuacion,... asi



edito: El objetivo es sakarlos para lelamente como ahora y que cada puntuacion y usuario sea única, es decir para cada usuario su puntuacion.

Saludos!


Título: Re: Problema al imprimir 2 vectores, con 2 bucles
Publicado por: Hearts en 2 Febrero 2009, 13:06 pm
Y es correcto, deberías hacer los dos bucles por separado por ejemplo.

Verás, lo que estás haciendo si te fijas, es que para cada j(primer bucle, nombre) le asignas todas las i(segundo bucle, puntuaciones).


Título: Re: Problema al imprimir 2 vectores, con 2 bucles
Publicado por: Dem0ny en 2 Febrero 2009, 13:31 pm
Pero al separar, en 2 bucles los 2 printf saldra las puntuaciones y despues abajo los nombres, todo dato por linea... quiero dejarlos unidos,

USUARIO PUNTUACIÓN

no...

User 1
User 2
User 3

Puntuación1
Puntuación2
Puntuación 3

Así quedaría separados los 2 bucles... con un print en cada uno...


Título: Re: Problema al imprimir 2 vectores, con 2 bucles
Publicado por: Dem0ny en 2 Febrero 2009, 13:37 pm
SOLUCIONADO:

Código
  1. import java.util.*;
  2. class Ejercicio2{
  3. public static void main(String args[]){
  4.   String [] nombres={"Pedro","Francisco","Roberto","Manuel","Vicente","Luis","Juli","Aaron","Carlos","binladen"};
  5.   int [] puntuacion={10,3,2,6,2,3,4,5,2,3};
  6.  
  7.  
  8.   for(int j=0;j<puntuacion.length;j++){
  9.  
  10.   System.out.println(" "+puntuacion[j]+ ""+nombres[j]);
  11.  
  12.  
  13.                      }
  14.  
  15.   }
  16. }


Título: Re: Problema al imprimir 2 vectores, con 2 bucles
Publicado por: alki en 6 Febrero 2009, 20:37 pm
De todos modos si quisieses usar dos iteradores aunque en este caso no tiene sentido. Lo podrias haber hecho del siguiente modo:

Código
  1. import java.util.*;
  2. class Ejercicio2{
  3. public static void main(String args[]){
  4.   String [] nombres={"Pedro","Francisco","Roberto","Manuel","Vicente","Luis","Juli","Aaron","Carlos"};
  5.   int [] puntuacion={10,3,2,6,2,3,4,5,2,3};
  6.  
  7.  
  8.   for(int j=0, int i=0;j<puntuacion.length && i<nombres.length;j++, i++){
  9.  
  10.   System.out.println(" "+puntuacion[i]+ ""+nombres[j]);
  11.  
  12.                      }
  13.  
  14.   }
  15. }

Un Saludo


Título: Re: Problema al imprimir 2 vectores, con 2 bucles
Publicado por: KaOs_NiGhT en 10 Marzo 2009, 00:07 am
for(int j=0;j<puntuacion.length;j++){
     for(int i=0; i<nombres.length;i++){
           System.out.print(" "+puntuacion+ ""+nombres[j]);   
     }
     System.out.println(" ");
}
//es algo asi, para imprimir con dos bucles  ;)


Título: Re: Problema al imprimir 2 vectores, con 2 bucles
Publicado por: Amerikano|Cls en 10 Marzo 2009, 17:10 pm
Estas equivocado, ya que en ese caso te imprimiria algo así:

- [I@3e25a5Pedro [I@3e25a5Pedro [I@3e25a5Pedro [I@3e25a5Pedro [I@3e25a5Pedro [I@3e25a5Pedro [I@3e25a5Pedro [I@3e25a5Pedro [I@3e25a5Pedro
 [I@3e25a5Francisco [I@3e25a5Francisco [I@3e25a5Francisco [I@3e25a5Francisco [I@3e25a5Francisco [I@3e25a5Francisco [I@3e25a5Francisco [I@3e25a5Francisco [I@3e25a5Francisco
 [I@3e25a5Roberto [I@3e25a5Roberto [I@3e25a5Roberto [I@3e25a5Roberto [I@3e25a5Roberto [I@3e25a5Roberto [I@3e25a5Roberto [I@3e25a5Roberto [I@3e25a5Roberto
 [I@3e25a5Manuel [I@3e25a5Manuel [I@3e25a5Manuel [I@3e25a5Manuel [I@3e25a5Manuel [I@3e25a5Manuel [I@3e25a5Manuel [I@3e25a5Manuel [I@3e25a5Manuel
 [I@3e25a5Vicente [I@3e25a5Vicente [I@3e25a5Vicente [I@3e25a5Vicente [I@3e25a5Vicente [I@3e25a5Vicente [I@3e25a5Vicente [I@3e25a5Vicente [I@3e25a5Vicente
 [I@3e25a5Luis [I@3e25a5Luis [I@3e25a5Luis [I@3e25a5Luis [I@3e25a5Luis [I@3e25a5Luis [I@3e25a5Luis [I@3e25a5Luis [I@3e25a5Luis
 [I@3e25a5Juli [I@3e25a5Juli [I@3e25a5Juli [I@3e25a5Juli [I@3e25a5Juli [I@3e25a5Juli [I@3e25a5Juli [I@3e25a5Juli [I@3e25a5Juli
 [I@3e25a5Aaron [I@3e25a5Aaron [I@3e25a5Aaron [I@3e25a5Aaron [I@3e25a5Aaron [I@3e25a5Aaron [I@3e25a5Aaron [I@3e25a5Aaron [I@3e25a5Aaron
 [I@3e25a5Carlos [I@3e25a5Carlos [I@3e25a5Carlos [I@3e25a5Carlos [I@3e25a5Carlos [I@3e25a5Carlos [I@3e25a5Carlos [I@3e25a5Carlos [I@3e25a5Carlos


- Porque fuera de que estas usando dos bucles repetiria cada nombre tantas veces como indique la longitud de puntuacion, ademas fijate que le estas dando es puntuacion y no le pones un indice que referencie al dato del arreglo que quieres imprimir, por esta razon te imprime esos numeros raros, que seria algo como la dir de memoria o que se yo donde se encuentra el arreglo puntuacion (no se si es esto o significa otra cosa  :rolleyes:).

Fijate bien que la solucion ya la han puesto con anterioridad  ;) si se quisiera usar dos bucles (que no es necesario).

Código
  1. import java.util.*;
  2. class Ejercicio2{
  3. public static void main(String args[]){
  4.   String [] nombres={"Pedro","Francisco","Roberto","Manuel","Vicente","Luis","Juli","Aaron","Carlos"};
  5.   int [] puntuacion={10,3,2,6,2,3,4,5,2,3};
  6.  
  7.  
  8.   for(int j=0, int i=0;j<puntuacion.length && i<nombres.length;j++, i++){
  9.  
  10.   System.out.println(" "+puntuacion[i]+ ""+nombres[j]);
  11.  
  12.                      }
  13.  
  14.   }
  15. }

Y la mejor es:

Código
  1. import java.util.*;
  2. class Ejercicio2{
  3. public static void main(String args[]){
  4.   String [] nombres={"Pedro","Francisco","Roberto","Manuel","Vicente","Luis","Juli","Aaron","Carlos","binladen"};
  5.   int [] puntuacion={10,3,2,6,2,3,4,5,2,3};
  6.  
  7.  
  8.   for(int j=0;j<puntuacion.length;j++){
  9.  
  10.   System.out.println(" "+puntuacion[j]+ ""+nombres[j]);
  11.  
  12.  
  13.                      }
  14.  
  15.   }
  16. }

Salu2

AmeRiK@nO