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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Problema con la ejecucion de un metodo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con la ejecucion de un metodo  (Leído 4,007 veces)
yeah69

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Problema con la ejecucion de un metodo
« en: 9 Enero 2008, 16:33 pm »

tengo este metodo por un lado

Código
  1. public static boolean Repetido(int i,int random,Pregunta[] P){
  2. int j = 0;
  3. boolean repetido = false;
  4. while ((repetido != true)||(j<i)){
  5. if(P[j] == P[random])
  6. repetido = true;
  7. j++;
  8. }
  9. if (repetido = true)
  10. return true;
  11. else
  12. return false;
  13. }
  14.  
  15. }
y lo quiero usar como condicion en un while para saber si se me repiten los casos aleatorios, y de ser asi, pues que vuelva a ejecutar Math.random...
aqui pongo el otro metodo:
Código
  1. public static Pregunta[] TemaRepasar(Pregunta[] preguntas) {
  2. int random;
  3. Pregunta[] preguntasRepasar = new Pregunta[10];
  4. for (int i = 0; i < preguntasRepasar.length; i++) {
  5. do{
  6. random = (int) (Math.random() * 20) + 1;
  7. }while (Repetido(9,random,preguntasRepasar) == true );
  8. preguntasRepasar[i] = preguntas[random];
  9. }
  10.  
  11. return preguntasRepasar;
  12. }

Eclipse no me marca ningun fallo en el codigo, pero cuando ejecuto el metodo me lo marca aqui:
   
Código
  1. preguntasRepasar[i] = preguntas[random];

antes de introducir el metodo repetido me tiraba bien 1 vez (usease en tiempo de ejecucion una vez que queria volver a repasar de nuevo se me colgaba pero la primera vez siempre me ha dejado)  y ahora con el metodo repetido no...
 si me podeis ayudar...
muxas gracias


« Última modificación: 9 Enero 2008, 16:35 pm por yeah69 » En línea

Casidiablo
Desarrollador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.919



Ver Perfil WWW
Re: problema con la condicion del bucle while
« Respuesta #1 en: 9 Enero 2008, 18:10 pm »

Haber...

La cosa es que lo estás haciendo de la forma más dificil... lo que tienes que hacer es "barajar" los indices, más no los objetos del arreglo, ya que así es más fácil y eficiente.

Un saludo!


En línea

yeah69

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Re: problema con la condicion del bucle while
« Respuesta #2 en: 9 Enero 2008, 18:38 pm »

como que barajar los indices???nu entiendo eso..yo lo que he hecho es que teniendo ls preguntas en un vector, pues lo igualo a otro, eso de momento me va bien, pero claro para impedir que tenga dos preguntas iguales, resultado de 2 veces el mismo valor en math.random pues me he hecho el metodo Repetido...xo no me tira...
En línea

Casidiablo
Desarrollador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.919



Ver Perfil WWW
Re: problema con la condicion del bucle while
« Respuesta #3 en: 9 Enero 2008, 19:04 pm »

A ver... tengo entendido que:

1. Tienen que salir las preguntas en desorden
2. No se pueden repetir

Teniendo en cuenta esas dos cosas analicemos lo siguiente:

El arreglo tiene X posiciones, y cada posición referencia un objeto de la clase Pregunta, el cual tiene un método para lanzar la pregunta. Siendo así, lo mejor en este caso es crear un segundo arreglo, de enteros, que serán los indices del arreglo de objetos pregunta. Así, si tenias antes algo como esto (en donde las preguntas se hacen siempre en el mismo orden):

Código
  1. for(int i = 0 ; i < preguntas.length; i++)
  2. {
  3. preguntas[i].preguntar();
  4. //lo que sea
  5. }

... deberías crear primero un arreglo de enteros en desorden así:

Código
  1. int[] arregloDesordenado = new int[preguntas.length];
  2. for(int i = 0 ; i < preguntas.length; i++)
  3. {
  4. int temp = (int) (Math.random() * 20);
  5. while(repetido(arregloDesordenado, temp))
  6. temp = (int) (Math.random() * 20);
  7. arregloDesordenado[i] = temp;
  8. }

luego, el método repetido() sería algo como esto:

Código
  1. public boolean repetido(int[] arregloDesordenado, int x)
  2. {
  3. for(int i = 0 ; i < arregloDesordenado.length; i++)
  4. if(arregloDesordenado[i]==x)
  5. return true;
  6. return false;
  7. }

Luego... solo deberías hacer esto para lanzar las preguntas:

Código
  1. for(int i = 0 ; i < preguntas.length; i++)
  2. {
  3. preguntas[arregloDesordenado[i]].preguntar();
  4. //lo que sea
  5. }

¿Lo pillas?

Pd. No tengo un compilador, así que no lo he probado :P pero... esa es la idea.

Un saludo!
En línea

yeah69

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Re: problema con la condicion del bucle while
« Respuesta #4 en: 9 Enero 2008, 19:24 pm »

sip, si q lo pillo ;)
pero lo que pasa es que como he hecho esto tambien:
Código
  1. public static Pregunta[] Examen(Console c) {
  2. int i;
  3. int random;
  4. Pregunta[] Examen = new Pregunta[12];
  5. Pregunta[] Tema1 = almacenarTema(1,c);
  6. Pregunta[] Tema2 = almacenarTema(2,c);
  7. Pregunta[] Tema3 = almacenarTema(3,c);
  8. Pregunta[] Tema4 = almacenarTema(4,c);
  9.  
  10. for(i=0;i<3;i++){
  11. random = (int) (Math.random() * 20);
  12. Examen[i] = Tema1[random];
  13. }
  14. for(i=3;i<6;i++){
  15. random = (int) (Math.random() * 20);
  16. Examen[i] = Tema2[random];
  17. }
  18. for(i=6;i<9;i++){
  19. random = (int) (Math.random() * 20);
  20. Examen[i] = Tema3[random];
  21. }
  22. for(i=9;i<12;i++){
  23. random = (int) (Math.random() * 20);
  24. Examen[i] = Tema4[random];
  25. }
  26. for(i=0;i<12;i++){
  27. //do{
  28. random = (int) (Math.random()* 12);
  29. //}while (Repetido(12,random,Examen) == true );
  30. Examen[i] = Examen[random];
  31. }
  32. return Examen;
  33. }
si te fijas en los for, van de 3 en 3, porque tengo que seleccionar 3 preguntas de entre los 4 temas, luego hago eso, y luego la idea es desordenarlas con el metodo Repetido el cual si te fijas le meto los parametros 12 por ser 12 las preguntas , random que es la cifra aleatoria, y Examen que es del tipo Pregunta.
luego lo inicio con
Código
  1. Pregunta[] Examen = Almacenador.Examen(c);
  2.                for (int i = 0; i < Examen.length; i++) {//vamos preguntando
  3. EstiloU();
  4. if (Examen[i].preguntar() == true) {
  5. puntos = puntos + 1;
  6. acertadas++;
  7. } else
  8. puntos = puntos - (4 / 10);
  9. }
  y si te fijas mi metodo Repetido y luego el uso es parecidisimo al tuyo,yo a la hora de usarlo hago un do-while y el otro metodo se rige por un bucle while con esta condicion
Código
  1. while ((repetido != true)||(j < i)){
« Última modificación: 10 Enero 2008, 13:20 pm por yeah69 » En línea

yeah69

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Problema con la ejecucion de un metodo
« Respuesta #5 en: 10 Enero 2008, 17:17 pm »

 :)Buenas de nuevo!!! :)
vereis yo tengo este metodo:
Código
  1. public static void Resultados() {
  2.  
  3. EstiloU();
  4. c.gotoxy(12, 7);
  5. c.cputs("Estos son los resultados de los examenes: ");
  6. for (int i = 0; i < contadorE; i++) {
  7.    c.gotoxy(12, j);c.cputs("Nota del examen " + (i + 1)     +                                       ": "+ notasExamen[i]);
  8. j++;
  9.     }
  10. c.gotoxy(12, 15);
  11. c.cputs("Pulsa una tecla para continuar...");
  12. c.getch();
  13.                                    }
el problema es que lo ejecuto y si, se ejecuta bien pero cuando pulso una tecla para continuar y volver al menu principal ....se me ejecuta este otro,y claro me finaliza el programa...en vez de irme al menu principal:
Código
  1. public static void Salir() {
  2.  
  3. Estilo();
  4. c.gotoxy(3, 23);
  5. Tiempo();
  6. c.gotoxy(30, 12);
  7. c.cputs("¡¡¡Adios " + nUsuario + "!!!");
  8. c.getch();
  9. System.exit(0);// finaliza el programa
  10. }

asi que alguna relacion debe haber, este es el codigo del main:
Código
  1. int opcion = 0;
  2. do {
  3. opcion = Menu();
  4. switch (opcion) {
  5. case '1':
  6. Repasar();
  7. break;
  8. case '2':
  9. Examen();
  10. break;
  11. case '3':
  12. NUsuario();
  13. break;
  14. case '4':
  15. Resultados();
  16. case '5':
  17. Salir();
  18.  
  19. default:
  20. break;
  21. }
  22. } while (opcion != 5);
  la verdad, no he encontrando ningun despiste...ni nada que relacione el metodo salir con el resultados...si veis algo o teneis alguna hipotesis pues comentadmela por favor, graciaaaaas!!!!!! ;) ;)
En línea

Casidiablo
Desarrollador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.919



Ver Perfil WWW
Re: Problema con la ejecucion de un metodo
« Respuesta #6 en: 10 Enero 2008, 18:10 pm »

¿Y así?:

Código
  1. int opcion = 0;
  2. do {
  3. opcion = Menu();
  4. switch (opcion) {
  5. case '1':
  6. Repasar();
  7. break;
  8. case '2':
  9. Examen();
  10. break;
  11. case '3':
  12. NUsuario();
  13. break;
  14. case '4':
  15. Resultados();
  16. break;
  17. case '5':
  18. Salir();
  19. break;
  20. default:
  21. break;
  22. }
  23. } while (opcion != 5);

Un saludo!
En línea

yeah69

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Re: Problema con la ejecucion de un metodo
« Respuesta #7 en: 10 Enero 2008, 18:16 pm »

joder es verdad!!! vaya despiste!!!!! muxisimas gracias...de nuevo jeje!!! ;) ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con funcion, Metodo de seleccion
Programación C/C++
krowa 7 4,002 Último mensaje 24 Octubre 2011, 19:54 pm
por krowa
Problema al mostrar return de metodo
Java
;c1v!c 3 2,488 Último mensaje 13 Diciembre 2012, 19:14 pm
por sapito169
Problema de ejecución
Programación C/C++
blue_net 4 2,298 Último mensaje 24 Julio 2013, 15:11 pm
por blue_net
Problema en ejecucion
Programación C/C++
vaneexd 2 2,412 Último mensaje 19 Noviembre 2013, 02:43 am
por rir3760
problema en ejecucion: ahorcado
Programación C/C++
priskot17 0 1,294 Último mensaje 20 Octubre 2016, 21:14 pm
por priskot17
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines