elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Objeto se sobrescribe en otro.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Objeto se sobrescribe en otro.  (Leído 1,948 veces)
snake_linux

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Objeto se sobrescribe en otro.
« en: 23 Febrero 2019, 12:55 pm »

Buenas, llevo unos días intentando un pequeño proyecto en Java para prácticar y tener más soltura, es básicamente un juego desde la linea de comandos, las clases son las siguientes:

*) Ataque: Aquí sólo se definen las propiedades de distintos ataques.

*) Pokemon: Cada uno va a tener cuatro ataques, por lo que cada objeto pokemon debe tener un Array de ataques (con limite 4)

*) Ficheros: Las propiedades de cada pokemon y sus ataques correspondientes se guardan en un fichero de texto plano con la sintaxis "clave=valor" por lo que uso esta clase para parsear el fichero, es un método estático, una vez parseadas las propiedades creo los cuatro ataques, "relleno" el array de ataques, creo un pokemon y devuelve el objeto pokemon en cuestión.

*) Principal: El main del juego, desde aquí se llama al método estático de la clase Ficheros devolviendo un objeto pokemon.

El problema que tengo es el siguiente: En el main del juego debo de crear dos objetos pokemon llamando al método estático de la clase Ficheros, pero cuando lo hago, el array "ataques[4]" del primer pokemon es sobrescrito por el del segundo pokemon, depurando he podido observar que en el método estático de la clase ficheros los objetos se generan correctamente, en cambio cuando recupero el objeto en el main del juego es cuando se sobrescribe dicho array.

Lo extraño además, es que si hago esto en el main:

Código:
System.out.println(pokemon1.getAtaques()[1].getNombre());
System.out.println(pokemon2.getAtaques()[1].getNombre());

Funciona correctamente, pero si lo guardo en un objeto "Pokemon" y luego imprimo sus ataques, se sobrescribe, llevo dias con esto y me estoy quebrando la cabeza sin poder sacarlo.

El código está en este repo de github: https://github.com/sonozaki/pokejava

Gracias.


En línea

animanegra

Desconectado Desconectado

Mensajes: 287



Ver Perfil
Re: Objeto se sobrescribe en otro.
« Respuesta #1 en: 23 Febrero 2019, 13:03 pm »

Código:
public static Pokemon miPokemon

No instancias dos objetos solo uno, que es estático. Entonces no sobreescribes un objeto en otro si no que creas uno al que le cambias los atributos.

Cada vez que cargas un nuevo poquemon del fichero deberías de generar un nuevo objeto de la clase Pokemon con un new Pokemon.



En línea


42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.
snake_linux

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Re: Objeto se sobrescribe en otro.
« Respuesta #2 en: 23 Febrero 2019, 13:55 pm »

Código:
public static Pokemon miPokemon

No instancias dos objetos solo uno, que es estático. Entonces no sobreescribes un objeto en otro si no que creas uno al que le cambias los atributos.

Cada vez que cargas un nuevo poquemon del fichero deberías de generar un nuevo objeto de la clase Pokemon con un new Pokemon.



Eso lo hago al final de la clase Ficheros con:

Código:
 miPokemon= new Pokemon(nombrePokemon, pociones, antidotos, ataques);
En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Objeto se sobrescribe en otro.
« Respuesta #3 en: 23 Febrero 2019, 14:03 pm »

En la clase Ficheros, no tiene sentido tener campos static para una clase que tiene 1 solo metodo. Esto tiene consecuencias si vas a invocar  a ese metodo mas de 1 vez.

Sugiero que definas todas los campos al interior de ese unico metodo. Con esto, cada vez que invoques ese metodo tendras versiones frescas de lo que creas y no estaras pisando lo anterior.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
snake_linux

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Re: Objeto se sobrescribe en otro.
« Respuesta #4 en: 23 Febrero 2019, 14:51 pm »

En la clase Ficheros, no tiene sentido tener campos static para una clase que tiene 1 solo metodo. Esto tiene consecuencias si vas a invocar  a ese metodo mas de 1 vez.

Sugiero que definas todas los campos al interior de ese unico metodo. Con esto, cada vez que invoques ese metodo tendras versiones frescas de lo que creas y no estaras pisando lo anterior.


Muchas gracias! ese era el problema.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como hacer que se cree un objeto a traves de otro objeto (¿se puede?) « 1 2 »
.NET (C#, VB.NET, ASP)
Sin Nick xD 10 9,461 Último mensaje 22 Marzo 2008, 06:18 am
por Sin Nick xD
Crear un objeto dentro de otro objeto
Programación Visual Basic
Tokes 7 7,090 Último mensaje 30 Agosto 2010, 05:41 am
por BlackZeroX
Problema con objeto dentro de otro objeto
PHP
Skeletron 3 6,512 Último mensaje 5 Enero 2011, 04:10 am
por Skeletron
como cambiar valor de otro objeto?
Java
greenselves 1 4,151 Último mensaje 22 Marzo 2011, 19:00 pm
por Debci
Objeto que apunte a otro
Java
SXF 3 3,326 Último mensaje 10 Octubre 2011, 21:01 pm
por SXF
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines