Foros del Web » Programación para mayores de 30 ;) » Java »

Problema de recursividad y/o backtracking

Estas en el tema de Problema de recursividad y/o backtracking en el foro de Java en Foros del Web. Hola, vengo a vosotros para pediros consejo. Lo que quiero conseguir es que cuando el usuario introduzca el orden de ejecución de unas tareas, el ...
  #1 (permalink)  
Antiguo 01/08/2012, 10:33
 
Fecha de Ingreso: agosto-2012
Mensajes: 2
Antigüedad: 11 años, 8 meses
Puntos: 0
Problema de recursividad y/o backtracking

Hola, vengo a vosotros para pediros consejo.

Lo que quiero conseguir es que cuando el usuario introduzca el orden de ejecución de unas tareas, el programa intente hacerla y si no puede, pase a la siguiente.

Por ejemplo, el usuario pone por que orden quiere usar A, B y C. Pongamos que elige B, A, y C, por ese orden. Esos datos los almaceno en un HashMap (puede ser otra cosa si lo creéis más conveniente) y se los paso de la gui al programa. Si B no está, pasa a A, y si tampoco está, pasa a C, si tampoco está, no hace nada y sigue la ejecución por otra parte.

Esto podría hacerlo sin comerme mucho el coco repitiendo muchas lineas de código:

Código:
if (HashMap.get("1").equals("A")) {
    doA();
} else if (HashMap.get("1").equals("B")) {
    doB();
} else if (HashMap.get("1").equals("C")) {
    doC();
}  .......
} else if (HashMap.get("3").equals("A")) {
    doC();
} else if (HashMap.get("3").equals("B")) {
    doC();
} else if (HashMap.get("3").equals("C")) {
    doC();
Pero eso no es elegante ni eficiente. Quizás para un ejemplo con 3 opciones no está mal, pero si hay muchas más eso es inmanejable.
Por eso pregunto si hay alguna forma mejor de hacer eso. Lo del titulo de recursividad y/o backtracking, es que me creo que la solución pasa por usar eso, pero no sabría como implementarlo.

¡Muchas gracias a todos por la ayuda que me podáis ofrecer!

Última edición por Deses; 01/08/2012 a las 10:49 Razón: Typos en el código de ejemplo.
  #2 (permalink)  
Antiguo 01/08/2012, 11:06
 
Fecha de Ingreso: agosto-2012
Ubicación: España
Mensajes: 6
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Problema de recursividad y/o backtracking

Hola Deses:

No acabo de ver exáctamente dónde dices que hay recursividad, sea como fuere, como bien dices, un hashmap para eso, no, no me parece muy "elegante", tienes estructuras ordenadas más cómodas para ello. Tienes que ejecutar acciones secuencialmente, por lo tanto creo que deberías utilizar una lista enlazada y recorrerla. La forma de introducir los elementos (A, B, o C) sigue siendo la misma, solo que tú ya no tienes que meterles el índice, se mete el primero, luego por la cola (la parte trasera de la lista) metes el siguiente y así hasta que no te queden tareas.

Ahora bien, la comparación la debes hacer con un switch (Si es que el identificador de tu tarea va a ser un string, en java 7 ya se permiten strings en la estructura switch)

for (String tareaActual: listaTareas){
switch (tareaActual){
case "A":
doA();
break;
case "B":
doB();
break;
case "C":
doC();
break;
}

Esa sería la forma rápida y sencilla, aunque si te soy sincero, deberías crear una interfaz del tipo IEjecutable o algo así y para cada elemento almacenado en la lista (ya no serían strings) llamar al metodo ejecutar.

P.D: huye de la recursividad siempre que puedas! es fea! (Si, suspendí un par de exámenes con llamadas recursivas XD)
  #3 (permalink)  
Antiguo 01/08/2012, 12:42
 
Fecha de Ingreso: julio-2012
Mensajes: 39
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: Problema de recursividad y/o backtracking

Bueno el problema con la recursividad es que si no sabes aplicarla se te queda el sistema en un bucle infinito, recursividad en ejemplo es un algoritmo que se resuelve llamándose a si mismo para ello se usa como ejemplo el algoritmo de fibonacci, pero en realidad es medio enredado.
  #4 (permalink)  
Antiguo 01/08/2012, 17:33
 
Fecha de Ingreso: agosto-2012
Mensajes: 2
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Problema de recursividad y/o backtracking

Muchas gracias por las respuestas, mañana miraré de aplicar la idea, a ver qué me sale.

Etiquetas: programa, recursividad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:40.