Foro de elhacker.net

Programación => Java => Mensaje iniciado por: anman en 25 Diciembre 2007, 19:19 pm



Título: Problema metodo
Publicado por: anman en 25 Diciembre 2007, 19:19 pm
Hola,quiero hacer un metodo para que un conjunto de metodos me aparezcan aleatoriamente y no todos ellos¿como lo puedo hacer?He estao intentando con el math.random pero no consigo nada.Agradeceria mucho que alguien me guiara un poco


Título: Re: Problema metodo
Publicado por: Casidiablo en 26 Diciembre 2007, 14:46 pm
Pues no te entendí nada... tomate el tiempo que sea necesario explicando lo que necesitas y qué has hecho.

Un saludo!


Título: Re: Problema metodo
Publicado por: anman en 26 Diciembre 2007, 15:30 pm
Voy a intentar explicarlo mejor.Yo tengo que hacer un trivial,cada pregunta del trivial la he puesto en un metodo.Quiero hacer un metodo para que cada pregunta aparezca aleatoriamente,no en orden como las he puesto.He intentado hacer un metodo y ponerle el math.random pero no consegui nada


Título: Re: Problema metodo
Publicado por: egyware en 26 Diciembre 2007, 16:39 pm
no se como funciona realmente el metodo Math.random pero
si por casualidad devuelve numeros entre 0 y 1 esta ecuacion matematica te puede servir u con este metodo de java tb
Código
  1. //.. dentro de tu clase
  2. private double random; /*supongamos que aqui guardamos el numero al azar
  3. perteneciente al intervalo [0,1] que nos devuelve algun metodo que genere numero aleatorios*/
  4. private int a = 10; /* aqui defino como a la cantidad de preguntas posibles que allan le puse como ejemplo 10 preguntas*/
  5. public String getPregunta(){
  6. ramdom = getRandom();/*aqui es mi supesto metodo que genera numeros entre
  7. 0 y 1*/
  8. int caso = ((int)(ramdom*a))+1;
  9. switch(caso){
  10. //... casos
  11. case 1:
  12. return "Alguna respuesta o llamada a metodo"
  13. case 2:
  14. return getPregunta2();
  15. }
  16. return "";
  17. }
  18.  
eso suerte xauu


Título: Re: Problema metodo
Publicado por: anman en 26 Diciembre 2007, 17:15 pm
Una pregunta y el metodo getRandom ¿que pones?


Título: Re: Problema metodo
Publicado por: egyware en 26 Diciembre 2007, 17:25 pm
 :huh: :huh:
Nose
se supone que el metodo era fictisio
lo que pasa es que nunca usado el metodo de Math.random() y como no lo he usado no se cual es el rango de numeros que devuelve, yo antes de programar en java programa en Qbasic y para obtener numero aleatorios era algo asi
Código
  1. a = 10' es la cantidad de casos le pondre 10
  2. caso = FIX(RND * a)+1
  3. SELECT CASE a
  4. CASE 1
  5. '...
  6. ' :huh: :huh: buaa se me olvido como era programar en Qbasic
  7.  
yap pero era algo asi voy a revisar la clase Math si te puedo ayudar en algo más
xauu
suerte

PS: ya listo quedaria algo asi
Código
  1. //.. dentro de tu clase
  2. private double random; }
  3. /*supongamos que aqui guardamos el numero al azarperteneciente al intervalo [0,1] que nos devuelve algun metodo que genere numero aleatorios*/
  4. private int a = 10;
  5. /* aqui defino como a la cantidad de preguntas posibles que allan le puse como ejemplo 10 preguntas*/
  6. public String getPregunta(){
  7. random = Math.random();/*aqui esta el metodo de la clase Math que devuelve numeros entre 0 y 1*/
  8. int caso = ((int)(random*a))+1;switch(caso){
  9. //... casos
  10. case 1:
  11. return "Alguna respuesta o llamada a metodo";
  12. case 2:
  13. return getPregunta2();
  14. }return "";
  15. }
  16.  
Te doy un consejo
cuando no sepas algo de algun metodo puedes revisar el Api de java
yo lo revise u justo era lo que necesita numeros entre [0,1]
xau suerte


Título: Re: Problema metodo
Publicado por: anman en 26 Diciembre 2007, 17:44 pm
Tengo el siguiente codigo:
Código:
public static void preguntasTema1() {

c = new Console();
c.gotoxy(5,2);
c.cputs("Usuario:" +TestJava.nombre);
double ramdom;
         int a=10;
         
         ramdom=Math.random();
    int caso = ((int)(ramdom*a))+1;
     
    switch(caso){

      case 1:
    pregunta1_tema1();
         
      case 2:
       pregunta2_tema1();
       
      case 3:
      pregunta3_tema1();
     
  case 4:
pregunta4_tema1();

  case 5:
    pregunta5_tema1();
  case 6:
  pregunta6_tema1();
  case 7:
    pregunta7_tema1();
  case 8:
    pregunta8_tema1();
  case 9:
    pregunta9_tema1();
  case 10:
    pregunta10_tema1();
  case 11:
    pregunta11_tema1();
  case 12:
    pregunta12_tema1();
  case 13:
    pregunta13_tema1();
  case 14:
    pregunta14_tema1();
  case 15:
    pregunta15_tema1();
  case 16:
    pregunta16_tema1();
  case 17:
    pregunta17_tema1();
  case 18:
    pregunta18_tema1();
  case 19:
            pregunta19_tema1();
  case 20:
    pregunta20_tema1();

  }
Lo que me pasa ahora es que me aparece aleatorio la primera ,pero las demas seguidas


Título: Re: Problema metodo
Publicado por: Casidiablo en 26 Diciembre 2007, 18:56 pm
Uisshhh... con el debido respeto... eso que haces está feo. Es mejor que tengas solo un metodo que se llame por ejemplo pregunta, y al que le pasas un parámetro con el número de la pregunta:

public void pregunta(int x)

y luego cosas como:

pregunta(5);
pregunta(8);
pregunta(random);
pregunta(x);

Un saludo!


Título: Re: Problema metodo
Publicado por: anman en 26 Diciembre 2007, 19:05 pm
No si lo habia hecho asi:
Código:
public static void preguntasTema1() {

c = new Console();
c.gotoxy(5,2);
c.cputs("Usuario:" +TestJava.nombre);
double ramdom;
         int a=10;
         
         ramdom=Math.random();
    int caso = ((int)(ramdom*a))+1;
     
    switch(caso){

      case 1:
      preguntas_resumen();
         
   
  }
}
    public static void preguntas_resumen(){
   
pregunta1_tema1();
pregunta2_tema1();
pregunta3_tema1();
pregunta4_tema1();
pregunta5_tema1();
pregunta6_tema1();
pregunta7_tema1();
pregunta8_tema1();
pregunta9_tema1();
pregunta10_tema1();
pregunta11_tema1();
pregunta12_tema1();
pregunta13_tema1();
pregunta14_tema1();
pregunta15_tema1();
pregunta16_tema1();
pregunta17_tema1();
pregunta18_tema1();
pregunta19_tema1();
pregunta20_tema1();
 
  }
pero no me funciona,no se porque


Título: Re: Problema metodo
Publicado por: Casidiablo en 26 Diciembre 2007, 19:17 pm
Haber... creo que no me has entendido... eso de hacer :

pregunta1_tema1();
pregunta2_tema1();
pregunta3_tema1();
pregunta4_tema1();
preguntan_tema1();

está muy mal. Lo mejor es hacerlo como te puse arriba. Si quieres pon TODO el código que tienes y te intento ayudar. Mi MSN es castidiablo@gmail.com por si quieres soporte online XD.

un saludo!


Título: Re: Problema metodo
Publicado por: Ragnarok en 26 Diciembre 2007, 23:09 pm
Deberías hacerlo con un fichero de propiedades, que, aunque no son realmente para eso, son muy facilitos de usar.

http://java.sun.com/docs/books/tutorial/i18n/resbundle/propfile.html
http://www.rgagnon.com/javadetails/java-0135.html

También puedes complicarte un poco más y usar xml o bases de datos, pero con usar ficheros de propiedades para empezar ya está bien.

Recuerda leer las normas y plantear las preguntas con claridad, lo de "intentar explicarlo  mejor" deberías haberlo hecho desde el principio.


Título: Re: Problema metodo
Publicado por: egyware en 27 Diciembre 2007, 16:54 pm
Voy a tomar tu codigo y si se que esta feo pero imaginen lo que yo hacia sin saber nada de java (con suerte sabia para que era System.out.println())
Código
  1. public static void preguntasTema1() {
  2.  
  3. c = new Console();
  4. c.gotoxy(5,2);
  5. c.cputs("Usuario:" +TestJava.nombre);
  6. double ramdom;
  7.         int a=10; //son veinte preguntas asi deberias colocar 20
  8.          a = 20; //ahi sip
  9.         random=Math.random();
  10.         int caso = ((int)(random*a))+1;
  11.  
  12.    switch(caso){
  13.      case 1:
  14.       pregunta1_tema1();
  15.        break; //si por algun motivo devuelve un String poner
  16.                  //return tu_metodo(con algun_parametro);
  17.                  //pero en este caso no lo es
  18.      case 2:
  19.       pregunta2_tema1();
  20.      break;  
  21.      case 3:
  22.      pregunta3_tema1();
  23.      break;
  24.  case 4:
  25. pregunta4_tema1();
  26. break;
  27.  case 5:
  28.    pregunta5_tema1();break;
  29.  case 6:
  30.  pregunta6_tema1();break;
  31.  case 7:
  32.    pregunta7_tema1();break;
  33.  case 8:
  34.    pregunta8_tema1();break;
  35.  case 9:
  36.    pregunta9_tema1();break;
  37.  case 10:
  38.    pregunta10_tema1();break;
  39.  case 11:
  40.    pregunta11_tema1();break;
  41.  case 12:
  42.    pregunta12_tema1();break;
  43.  case 13:
  44.    pregunta13_tema1();break;
  45.  case 14:
  46.    pregunta14_tema1();break;
  47.  case 15:
  48.    pregunta15_tema1();break;
  49.  case 16:
  50.    pregunta16_tema1();break;
  51.  case 17:
  52.    pregunta17_tema1();break;
  53.  case 18:
  54.    pregunta18_tema1();break;
  55.  case 19:
  56.            pregunta19_tema1();break;
  57.  case 20:
  58.    pregunta20_tema1();break;
  59.  }
  60.  
te ayude un poco pero igual deberias arreglar un poco tu codigo

Aver si aún no se te ocurre aqui va algo
Código
  1. public Class Main {
  2. public static void main (String s[]){
  3. System.out.println("Tirando los dados");
  4. int b = 6; //seis posibles respuestas
  5. int caso = ((int)Math.random()*b)+1;
  6. switch(caso){
  7. case 1:
  8. System.out.println("Ha Salido el numero 1");
  9. break;
  10. case 2:
  11. System.out.println("Ha Salido el numero 2");
  12. break;
  13. case 3:
  14. System.out.println("Ha Salido el numero 3");
  15. break;
  16. case 4:
  17. System.out.println("Ha Salido el numero 4");
  18. break;
  19. case 5:
  20. System.out.println("Ha Salido el numero 5");
  21. break;
  22. case 6:
  23. System.out.println("Ha Salido el numero 6");
  24. break;
  25. }//fin de switch
  26. }//fin de main
  27. }//fin de la clase
  28.  
pero puedo hacer mas pillo aún
Código
  1. public Class Main {
  2. public static void main (String s[]){
  3. System.out.println("Tirando los dados");
  4. int a = 6; //seis posibles respuestas
  5. int num = ((int)Math.random()*a)+1;
  6. System.out.println("Ha Salido en el dado el numero *"+num+"*");
  7. }//fin de main
  8. }//fin de la clase
  9.  
y eso te cambie algunas variables para que sepas para que realmente sirven y como puedes usar ese numero del tipo int para obtener las preguntas que estan en un Array de String
puedes
Código
  1. String preguntas[] = new String[2];
  2. static {
  3. s[0] = "Pregunta 1";
  4. s[1] = "pregunta 2";
  5. s[2] = "pregunta 3";
  6. }
  7. public static void main (String args[]){
  8. int num = ((int)Math.random()*3)+1;/*deje immediatamente seteado que son 3 preguntas y nada mas*/
  9. System.out.println(s[num]);
  10. }
  11.  
Bueno espero que estos ejemplos te sirvan te mucha ayuda
xauuu


Título: Re: Problema metodo
Publicado por: anman en 4 Enero 2008, 21:04 pm
El codigo para hacer lo que pedi es este
Código:
public static void preguntasTema1() {
c = new Console();
c.gotoxy(5, 2);
c.cputs("Usuario:" + nombre);
// genera preguntas aleatorias.Math.random nos da un numero entre 0 y x
int[] preguntasAleatorias = new int[10];/*


for (int i = 0; i < 10; i++) {// recorremos el vector

int random = (int) (Math.random() * 20) + 1;

while (repetido(random, preguntasAleatorias)) {
random = (int) (Math.random() * 20) + 1;
}
preguntasAleatorias[i] = random;

}// fin de preguntas aleatorias
for (int i = 0; i < preguntasAleatorias.length; i++) {
switch (preguntasAleatorias[i]) {
case 1:
pregunta("","");
                                break;
                        case 2:
                                pregunta("","");
                                break;
}
}
}

// Verificamos que las preguntas no se repitan
public static boolean repetido(int x, int[] preguntasAleatorias) {
// recorremos el vector de preguntasAlaeatorias
for (int i = 0; i < preguntasAleatorias.length; i++)
if (preguntasAleatorias[i] == x)
return true;
return false;
}
pd:gracias a Casidiablo que me ha ayudado a hacerlo