Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Pirat3net en 6 Diciembre 2011, 07:36 am



Título: codigo java no tira
Publicado por: Pirat3net en 6 Diciembre 2011, 07:36 am
en este codigo , Jugador es una clase que e creado y su constructor espera un String llamado nombre, tanto Jugador como nombre son publicos,
el error que me dice eclipse es en la ultima linea y me dice que jugador1 no se reconoce como una variable.
el objetivo del codigo es crear objetos de la clase jugador dependiendo de la variable jugadores introducida en el bucle for y que viene especificada mas arriba del codigo,

Código
  1. for (int k = 0; k < jugadores; k++) {
  2. System.out.println("introduzca el nombre del jugador "+(k+1));
  3.  
  4. if (k == 0) {
  5. Jugador jugador1 = new Jugador(lectura.readLine());
  6. }
  7.  
  8.  
  9. if (k == 1) {
  10. Jugador jugador2 = new Jugador(lectura.readLine());
  11. }
  12.  
  13. if (k == 2) {
  14. Jugador jugador3 = new Jugador(lectura.readLine());
  15. }
  16.  
  17. if (k == 3) {
  18. Jugador jugador4 = new Jugador(lectura.readLine());
  19. }
  20.  
  21. if (k == 4) {
  22. Jugador jugador5 = new Jugador(lectura.readLine());
  23. }
  24.  
  25. if (k == 5) {
  26. Jugador jugador6 = new Jugador(lectura.readLine());
  27. }
  28. }
  29. System.out.println(jugador1.nombre);


Título: Re: codigo java no tira
Publicado por: Proteus1989 en 6 Diciembre 2011, 13:53 pm
No te deja que te crees un objeto dentro de una sentencia if y luego lo uses fuera del if. ¿Por qué? Porque si no entra al if no existe la declaración del objeto, y por tanto no se puede llamar.

Solución?

Código:
	Jugador jugador1 = null;
Jugador jugador2 = null;
Jugador jugador3 = null;
Jugador jugador4 = null;

for (int k = 0; k < jugadores; k++) {
System.out.println("introduzca el nombre del jugador "+(k+1));


if (k == 0) {
jugador1 = new Jugador(lectura.readLine());
}


Título: Re: codigo java no tira
Publicado por: KaL3o en 6 Diciembre 2011, 23:26 pm
Eso ocurre porque no existe el objeto cuando estas utilizando el System.out.println

En java el objeto, digamos "vive" dentro del ambito en que ha sido creado, cuando el ambito termina el objeto se destruye. Osea el objeto no es persistente.

Me explico un poco mejor :D

si tienes un for y declaras el objeto dentro del ciclo, entonces el objeto solo existira mientras el ciclo exista, terminado el ciclo el objeto muere.

Lo mismo ocurre si instancias un objeto dentro de un if, el objeto existe mientras el if este activo, terminado el if el objeto "muere".

Por eso en tu codigo cuando llamas a imprimir por consola, seguramente te dira que tu objeto no existe.

Salu2 ;)

pd: mirando tu codigo no estara de mas decir que los atributos de una clase generalmente se declaran privados por el encapsulamiento y ocultamiento de la informacion del paradigma de orientacion a objetos. Para lo cual se crean los metodos para poder acceder a los atributos de la clase.