import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;

public class Hanoi extends JApplet implements ActionListener {
//n Japplet de java; es una especie de aplicacion incrustada en el código de una pagina web (HTML).
//Sirve para usar funciones que no son accesibles desde la programación misma de la pagina

JTextArea resultado;
//TextArea muestra múltiples líneas de texto. Ambos componentes muestran todo su texto en el mismo formato (fuente, color...).

JTextField textoEntrada;
//JTextField es un componente que muestra una sola línea de texto.

String salida = "";
int contador=0;
// initialize the applet
public void init() {
JLabel lblTitulo, lblEntrada, lblSalida;
JButton btnProcesar;
Container contString = getContentPane();
contString.setLayout(new FlowLayout());
lblTitulo = new JLabel(" Las Torres de Hanoi ");
contString.add(lblTitulo);
lblEntrada = new JLabel("Digite la cantidad de discos");
contString.add(lblEntrada);
textoEntrada = new JTextField(4);
contString.add(textoEntrada);
textoEntrada.addActionListener(this);
btnProcesar = new JButton("Procesar");
btnProcesar.addActionListener(this);
contString.add(btnProcesar);
lblSalida = new JLabel(" Resultado: ");
contString.add(lblSalida);
resultado = new JTextArea(15, 45);
resultado.setEnabled(false);
contString.add(new JScrollPane(resultado));
}
//metodo actionPerformed
public void actionPerformed (ActionEvent e){
//inicializo en 0 el contador y la salida
contador=0;
salida="";
// Definición de los chars
char O = 'O';
char T = 'T';
char D = 'D';
//convertir lo que se escribe en textoEntrada a entero
String Entrada = "", TiLi="";
Entrada = textoEntrada.getText();
int X = Integer.parseInt(Entrada);
if (X==1){ TiLi=" -----Usted ha solicitado "+X+" disco-----\n\n";}
else {TiLi=" -----Usted ha solicitado "+X+" discos-----\n\n";}

//Control de Error, el número debe ser mayor que 0
if (X<=0) { resultado.setText(TiLi+"::ERROR::\nNecesito al menos un disco para trabajar");}
else resultado.setText(TiLi+Solve(X,O,T,D));

}
//Método Move, escribe el movimiento debido y suma al contador
public String Move(char O, char D){
String mover= "mueva el disco en "+O+" hasta "+D+"\n";
contador++;
return " movimiento numero "+contador+": "+mover;
}

//Método Solve, es el encargado de solucionar el problema
public String Solve (int X, char O, char T, char D){
//Necesita el momento en que llegue a X==0 pues usa recursividad hasta que el Stack cumple con X=0
//que es cuando empieza a sacar los valores necesitados
if (X==0)
salida +="";
else {
Solve (X-1,O,D,T);
salida += Move(O,D);
Solve (X-1,T,O,D);
}
return salida;
}
public Hanoi() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setBackground(SystemColor.controlLtHighlight);
}}

No hay comentarios:

Publicar un comentario