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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Array de Objetos y selección aleatoria de los mismos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Array de Objetos y selección aleatoria de los mismos  (Leído 10,055 veces)
Gonzalo Leonardo

Desconectado Desconectado

Mensajes: 53



Ver Perfil WWW
Array de Objetos y selección aleatoria de los mismos
« en: 26 Marzo 2014, 00:06 am »

Hola Comunidad.
No se como introducir objetos en array y seleccionarlos aleatoriamente. Esto lo necesito para seleccionar dos objetos de clases diferentes y de array diferentes y hacerlos enfentrar, como si fuera un juego de rol.

He buscado bastante en la web, pero solo encuentro el clásico y sencillo ejemplo de los números aleatorios dentro de un array.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Array de Objetos y selección aleatoria de los mismos
« Respuesta #1 en: 26 Marzo 2014, 00:18 am »

no se de java pero no puede ser más dificil que


Código
  1. int rnd = Math.random() * conteoArray;
  2. valor = arary[rnd];


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Mitsu

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: Array de Objetos y selección aleatoria de los mismos
« Respuesta #2 en: 26 Marzo 2014, 03:52 am »

No entiendo bien tu pregunta, ¿Quieres generar objetos aleatoriamente o quieres a partir de una lista de objetos elegir dos objetos aleatorios?

Sea como sea, no es difícil. Con la clase java.util.Random como te dijo engelx lo puedes conseguir. Te ejo un ejemplo:

Código
  1. package pe.edu.unp.rol;
  2.  
  3. public abstract class Jugador {
  4.  
  5. private String nombre;
  6. private Double poder;
  7. private Integer vida;
  8.  
  9. public Jugador() {
  10. this("",0d,0);
  11. }
  12.  
  13. public Jugador(String nombre, Double poder, Integer vida) {
  14. this.nombre = nombre;
  15. this.poder = poder;
  16. this.vida = vida;
  17. }
  18.  
  19. public String getNombre() {
  20. return this.nombre;
  21. }
  22.  
  23. public void setNombre(String nombre) {
  24. this.nombre = nombre;
  25. }
  26.  
  27. public Double getPoder() {
  28. return this.poder;
  29. }
  30.  
  31. public void setPoder(Double poder) {
  32. this.poder = poder;
  33. }
  34.  
  35. public Integer getVida() {
  36. return vida;
  37. }
  38.  
  39. public void setVida(Integer vida) {
  40. this.vida = vida;
  41. }
  42.  
  43.  
  44. }

Código
  1. package pe.edu.unp.rol;
  2.  
  3. public class Soldado extends Jugador {
  4.  
  5. public Soldado() {
  6. super();
  7. }
  8.  
  9. public Soldado(String nombre, Double poder, Integer vida) {
  10. super(nombre,poder,vida);
  11. }
  12.  
  13. }

Código
  1. package pe.edu.unp.rol;
  2.  
  3. public class Campesino extends Jugador {
  4.  
  5. public Campesino() {
  6. super();
  7. }
  8.  
  9. public Campesino(String nombre, Double poder, Integer vida) {
  10. super(nombre,poder,vida);
  11. }
  12.  
  13.  
  14. }

Código
  1. package pe.edu.unp.rol;
  2.  
  3. public class Mago extends Jugador {
  4.  
  5. private Double magia;
  6.  
  7. public Mago() {
  8. super();
  9. }
  10.  
  11. public Mago(String nombre, Double poder, Integer vida, Double magia) {
  12. super(nombre,poder,vida);
  13. this.magia = magia;
  14. }
  15.  
  16. public Double getMagia() {
  17. return magia;
  18. }
  19.  
  20. public void setMagia(Double magia) {
  21. this.magia = magia;
  22. }
  23. }

Código
  1. package pe.edu.unp.rol;
  2.  
  3. public class Obrero extends Jugador {
  4.  
  5. public Obrero() {
  6. super();
  7. }
  8.  
  9. public Obrero(String nombre, Double poder, Integer vida) {
  10. super(nombre,poder,vida);
  11. }
  12.  
  13.  
  14. }



Código
  1. import java.lang.reflect.InvocationTargetException;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;
  5.  
  6. public class Test {
  7.  
  8. private final static String paquete = "pe.edu.unp.rol."; // nombre del paquete que contiene las clases
  9.  
  10. /**
  11. * Este metodo genera en tiempo de ejecución instancias de 4 clases distintas, con nombres aleatorios
  12. * y sus propiedades poder, vida y en caso la instancia sea tipo 'Mago', agrega la magia, todos aleatorios.
  13. *
  14. * @return List<Jugador>
  15. * @throws InstantiationException
  16. * @throws IllegalAccessException
  17. * @throws IllegalArgumentException
  18. * @throws InvocationTargetException
  19. * @throws NoSuchMethodException
  20. * @throws SecurityException
  21. * @throws ClassNotFoundException
  22. */
  23. public List<Jugador> getJugadores() throws InstantiationException, IllegalAccessException, IllegalArgumentException,
  24. List<Jugador> listaObjetos = new ArrayList<>(); // lista que almacenara las instancias de las clases
  25. String[] clases = {"Soldado","Campesino","Mago","Obrero"};
  26. String[] nombres = {"Halz","Orion","Violetus","Orks","Kalz","Pivot","Nerth","Seth","Vandal"};
  27.  
  28. int numeroObjetosAzar = new Random().nextInt(50)+1; // se crearan maximo 50 instancias con los 4 tipos de clases
  29.  
  30. for(byte i=0; i<numeroObjetosAzar; i++) {
  31. // valores aleatorios que se setearan a las instancias
  32. String claseAleatoria = clases[ (1 + new Random().nextInt(3)) ];
  33. String nombreAleatorio = nombres[ (1 + new Random().nextInt(8)) ];
  34. Double poderAleatorio = Math.floor(1 + Math.random() * 100);
  35. Double magiaAleatoria = Math.floor(1 + Math.random() * 100);
  36. Integer vidaAleatoria = 1 + new Random().nextInt(100);
  37.  
  38. /** de acuerdo a la clase, obtenemos una instancia de acuerdo a la clase que especificamos
  39. por medio de 'Class.forName(clase)' seguido de 'getConstructor()' que obtiene el
  40. constructor de dicha clase y le pasamos los parametros.
  41. Esto se puede hacer perfectamente con el operador new Clase(parametros). La diferencia
  42. es que Class.forName() se usa cuando no se sabe que clase instanciar si no hasta cuando
  43. las circunstancias en tiempo de ejecucion lo determine. new lo usamos cuando sabemos de
  44. antemano que clase instanciar.*/
  45. switch(claseAleatoria) {
  46. case "Soldado": listaObjetos.add((Soldado)Class.forName(paquete+claseAleatoria)
  47. .getConstructor(String.class,Double.class,Integer.class).newInstance(nombreAleatorio,poderAleatorio,vidaAleatoria));
  48. break;
  49. case "Campesino": listaObjetos.add((Campesino)Class.forName(paquete+claseAleatoria)
  50. .getConstructor(String.class,Double.class,Integer.class).newInstance(nombreAleatorio,poderAleatorio,vidaAleatoria));
  51. break;
  52. case "Mago": listaObjetos.add((Mago)Class.forName(paquete+claseAleatoria)
  53. .getConstructor(String.class,Double.class,Integer.class,Double.class).newInstance(nombreAleatorio,poderAleatorio,vidaAleatoria,magiaAleatoria));
  54. break;
  55. default : listaObjetos.add((Obrero)Class.forName(paquete+claseAleatoria)
  56. .getConstructor(String.class,Double.class,Integer.class).newInstance(nombreAleatorio,poderAleatorio,vidaAleatoria));
  57. }
  58. }
  59.  
  60.  
  61. return listaObjetos;
  62. }
  63.  
  64. public static void main(String[] args) {
  65. Test test = new Test();
  66.  
  67. /**
  68. *  Ejemplo de recorrido. Generalizamos con 'Jugador' porque todas sus subclases:
  69. * Soldado, Campesino, Mago y Obrero al heredar de Jugador son tambien un Jugador.
  70. * Recuerda que la herencia es una relacion es un. El operador 'instaceof' es util
  71. * para saber si una objeto es de una clase dada: objeto instaceof clase. Esto
  72. * retorna true si es el objeto es una instancia de la clase o false si no lo es.
  73. */
  74. try {
  75. for(Jugador e : test.getJugadores()) {
  76. System.out.println("Tipo:\t"+e.getClass().getSimpleName());
  77. System.out.println("Nombre:\t"+e.getNombre());
  78. System.out.println("Poder:\t"+e.getPoder());
  79. System.out.println("Vida:\t"+e.getVida());
  80. if(e.getClass().getSimpleName().equals("Mago")) {
  81. Mago mago = (Mago) e;
  82. System.out.println("Magia:\t"+mago.getMagia());
  83. }
  84.  
  85. }
  86. e.printStackTrace();
  87. System.err.println(e.getLocalizedMessage());
  88. }
  89.  
  90.  
  91. }
« Última modificación: 26 Marzo 2014, 15:35 pm por Mitsu » En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Array de Objetos y selección aleatoria de los mismos
« Respuesta #3 en: 26 Marzo 2014, 19:17 pm »

El arreglo tendrá un tamaño definido desde el inicio o el usuario podrá ingresar el tamaño? (bueno eso es lo de menos)
No creo que no hayas encontrado nada.

1. Tienes que hacer es leer (o definir)  el tamaño del arreglo
Para leer por teclado puedes utilizar las clases Scanner o BufferedReader.

2. Para introducir los datos al arreglo tienes que utilizar un ciclo (bucle, loop) en este caso es mejor utilizar un do-while.
Dejaras de pedir números hasta que el contador (uno que definiras) sea menor que el tamaño del arreglo. Esta será tu condición del do-while.

3. El siguiente paso es generar dos valores aleatorios de acuerdo al tamaño del arreglo - 1.

4. A partir de tus dos números generados lo unico que tienes que hacer es leer los indices de acuerdo a los valores.


Lo siento no te puedo dar código, mejor ve haciendo los pasos como te menciono y colocalo, en donde tengas dudas te ayudaremos.

Saludos!


« Última modificación: 26 Marzo 2014, 19:33 pm por Darhius » En línea

abc
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problemas: array de objetos.[SOLUCIONADO]
Java
yovaninu 2 5,883 Último mensaje 22 Mayo 2008, 10:06 am
por k0n3
[SOLUCIONADO]Array de objetos
.NET (C#, VB.NET, ASP)
diego_lp 4 4,249 Último mensaje 19 Febrero 2010, 16:33 pm
por elmaro
Ayuda en C# con array de objetos
.NET (C#, VB.NET, ASP)
DaNuK 5 14,148 Último mensaje 19 Abril 2010, 07:10 am
por DaNuK
Selección aleatoria en Combobox?
Desarrollo Web
CWeeD 2 3,554 Último mensaje 4 Febrero 2011, 00:20 am
por JungleBoogie
Compartiendo un ejercicio de selección aleatoria (C#)
Ejercicios
erest0r 0 2,662 Último mensaje 7 Junio 2014, 22:24 pm
por erest0r
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines