Java - AYUDA TORRE DE HANOI JAVA

 
Vista:

AYUDA TORRE DE HANOI JAVA

Publicado por Felipe Diaz Mendoza (1 intervención) el 12/10/2016 16:25:43
Buenas necesito hacer una torre de hanoi con pilas. necesito resolver el error de StackOverflowError. PORFAVOR

Codigo HANOI.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package ejercicio;
 
/**
 *PUSH= INSERTAR / PONER
 * POP= EXTRAER
 * @author Felipe
 */
public class Hanoi {
 
   //atributos
    Pila p1, p2, p3;
    int n;
 
    //constructor //Discos puestos en orden
 
public Hanoi(int n){
        p1 = new Pila();
        for(int i =n; i>0; i--){
            p1.push(1);
        }
        p2= new Pila();
        p3 = new Pila();
    }
 
 
 
  public Hanoi(){
        n=3;
        p1 = new Pila(3);
        p1.push(3);
        p1.push(2);
        p1.push(1);
        p2= new Pila();
        p3 = new Pila();
    }
 
 
    //metodos
    //mover (p1,p3)
    public void mover(Pila origen, Pila destino){
        //validacion
        if(destino.tope!=null){ //si es que el destino es distinto de null
        if(origen.tope.tamaño<destino.tope.tamaño){ //si es un movimiento valido
            Nodo tmp;
        tmp = origen.tope;
        //destino.push(origen.tope.tamaño);
        destino.push(tmp.tamaño); //traslado el tamaño 
        origen.pop(); //elimino el nodo
 
    }
        else{
            System.out.println("Movimiento NO Valido");
        }
}
    else{
    destino.push(origen.tope.tamaño);
    origen.pop();
        }
 
    }
       public void resolver(int n, Pila origen, Pila auxiliar, Pila destino){
           if(p1.tope.siguiente==null){
               mover(p1,p3);
               System.out.println("mover disco de" + origen + "a" + destino);
           }else{
               resolver(n-1,origen, auxiliar, destino); //ERROR STACKOVERFLOWERROR
               System.out.println("mover disco de" + n + "a" + origen + "hacia" + auxiliar);
               resolver(n-1, auxiliar, origen, destino);
 
           }
       }
 
}
PRUEBA DE DONDE LLAMAMOS LA FUNCION

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package ejercicio;
 
/**
 *PUSH= AGREGAR/PONER
 *POP= SALIR/EXTRAER
 * @author Felipe
 */
 
public class Prueba {
    public static void main(String [] args){
        Hanoi h = new Hanoi(3);
        h.resolver(h.n,h.p1, h.p2, h.p3);
        System.out.println("Pila 1");
        h.p1.mostrar();
 
    }
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

AYUDA TORRE DE HANOI JAVA

Publicado por YYanes (144 intervenciones) el 12/10/2016 16:45:30
Hola:
creo que debería revisar el valor de "n", no sea que se trate simplemente de una posición fuera de rango (sobre todo cuando se refiere a "n-1" en el momento en que las pilas que están vacías).

Un GigaSaludo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar