Browse Source

Agregado la documentación de cada metodo y clase faltante

carlos 1 year ago
parent
commit
391450ec1c

+ 102
- 0
ejemplos/FirstLetterEqual(1).xml View File

@@ -0,0 +1,102 @@
1
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+<!DOCTYPE root SYSTEM "mtbase.dtd">
3
+<root>
4
+	<transicion>
5
+		<movimiento>R</movimiento>
6
+		<si>a</si>
7
+		<qj>1</qj>
8
+		<qi>0</qi>
9
+		<sj>#</sj>
10
+	</transicion>
11
+	<transicion>
12
+		<qi>1</qi>
13
+		<si>a</si>
14
+		<sj>#</sj>
15
+		<qj>1</qj>
16
+		<movimiento>R</movimiento>
17
+	</transicion>
18
+	<transicion>
19
+		<qi>1</qi>
20
+		<si>b</si>
21
+		<movimiento>R</movimiento>
22
+		<qj>1</qj>
23
+		<sj>#</sj>
24
+	</transicion>
25
+	<transicion>
26
+		<qi>1</qi>
27
+		<si>c</si>
28
+		<qj>2</qj>
29
+		<sj>#</sj>
30
+		<movimiento>R</movimiento>
31
+	</transicion>
32
+	<transicion>
33
+		<qi>2</qi>
34
+		<si>a</si>
35
+		<qj>3</qj>
36
+		<sj>#</sj>
37
+		<movimiento>R</movimiento>
38
+	</transicion>
39
+	<transicion>
40
+		<qi>3</qi>
41
+		<si>a</si>
42
+		<qj>3</qj>
43
+		<sj>#</sj>
44
+		<movimiento>R</movimiento>
45
+	</transicion>
46
+	<transicion>
47
+		<qi>3</qi>
48
+		<si>b</si>
49
+		<qj>3</qj>
50
+		<sj>#</sj>
51
+		<movimiento>R</movimiento>
52
+	</transicion>
53
+	<transicion>
54
+		<qi>0</qi>
55
+		<si>b</si>
56
+		<qj>4</qj>
57
+		<sj>#</sj>
58
+		<movimiento>R</movimiento>
59
+	</transicion>
60
+	<transicion>
61
+		<qi>4</qi>
62
+		<si>a</si>
63
+		<qj>4</qj>
64
+		<sj>#</sj>
65
+		<movimiento>R</movimiento>
66
+	</transicion>
67
+	<transicion>
68
+		<qi>4</qi>
69
+		<si>b</si>
70
+		<qj>4</qj>
71
+		<sj>#</sj>
72
+		<movimiento>R</movimiento>
73
+	</transicion>
74
+	<transicion>
75
+		<qi>4</qi>
76
+		<si>c</si>
77
+		<qj>5</qj>
78
+		<sj>#</sj>
79
+		<movimiento>R</movimiento>
80
+	</transicion>
81
+	<transicion>
82
+		<qi>5</qi>
83
+		<si>b</si>
84
+		<qj>6</qj>
85
+		<sj>#</sj>
86
+		<movimiento>R</movimiento>
87
+	</transicion>
88
+	<transicion>
89
+		<qi>6</qi>
90
+		<si>a</si>
91
+		<qj>6</qj>
92
+		<sj>#</sj>
93
+		<movimiento>R</movimiento>
94
+	</transicion>
95
+	<transicion>
96
+		<qi>6</qi>
97
+		<si>b</si>
98
+		<qj>6</qj>
99
+		<sj>#</sj>
100
+		<movimiento>R</movimiento>
101
+	</transicion>
102
+</root>

+ 14
- 0
ejemplos/FirstLetterEqual.xml View File

@@ -99,4 +99,18 @@
99 99
 		<sj>#</sj>
100 100
 		<movimiento>R</movimiento>
101 101
 	</transicion>
102
+	<transicion>
103
+		<qi>3</qi>
104
+		<si>#</si>
105
+		<qj>7</qj>
106
+		<sj>#</sj>
107
+		<movimiento>*</movimiento>
108
+	</transicion>
109
+	<transicion>
110
+		<qi>6</qi>
111
+		<si>#</si>
112
+		<qj>7</qj>
113
+		<sj>#</sj>
114
+		<movimiento>*</movimiento>
115
+	</transicion>
102 116
 </root>

+ 1
- 1
ejemplos/TuringIgual0sIgual1s.xml View File

@@ -1,5 +1,5 @@
1 1
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
-<!DOCTYPE root SYSTEM "mtbase.dtd">
2
+<!DOCTYPE root SYSTEM "mtbase_.dtd">
3 3
 <root>
4 4
 	<transicion>
5 5
 		<qi>0</qi>

+ 1
- 1
ejemplos/mT.xml View File

@@ -1,5 +1,5 @@
1 1
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
-<!DOCTYPE root SYSTEM "mtbase.dtd">
2
+<!DOCTYPE root SYSTEM "mtbase_.dtd">
3 3
 <root>
4 4
 	<transicion>
5 5
 		<qi>0</qi>

+ 1
- 1
ejemplos/mT4.xml View File

@@ -1,5 +1,5 @@
1 1
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
-<!DOCTYPE root SYSTEM "mtbase.dtd">
2
+<!DOCTYPE root SYSTEM "mtbase_.dtd">
3 3
 <root>
4 4
 	<transicion>
5 5
 		<si>0</si>

+ 29
- 7
ejemplos/mtbase.dtd View File

@@ -1,7 +1,29 @@
1
-<!ELEMENT root (transicion+)>
2
-<!ELEMENT transicion (qi,si,qj,sj,movimiento)>
3
-<!ELEMENT qi (#PCDATA)>
4
-<!ELEMENT si (#PCDATA)>
5
-<!ELEMENT qj (#PCDATA)>
6
-<!ELEMENT sj (#PCDATA)>
7
-<!ELEMENT movimiento (#PCDATA)>
1
+<?xml encoding="UTF-8"?>
2
+
3
+        <!ELEMENT root (transicion)+>
4
+        <!ATTLIST root
5
+                xmlns CDATA #FIXED ''>
6
+
7
+        <!ELEMENT transicion (movimiento|qi|qj|si|sj)+>
8
+        <!ATTLIST transicion
9
+                xmlns CDATA #FIXED ''>
10
+
11
+        <!ELEMENT movimiento (#PCDATA)>
12
+        <!ATTLIST movimiento
13
+                xmlns CDATA #FIXED ''>
14
+
15
+        <!ELEMENT qi (#PCDATA)>
16
+        <!ATTLIST qi
17
+                xmlns CDATA #FIXED ''>
18
+
19
+        <!ELEMENT qj (#PCDATA)>
20
+        <!ATTLIST qj
21
+                xmlns CDATA #FIXED ''>
22
+
23
+        <!ELEMENT si (#PCDATA)>
24
+        <!ATTLIST si
25
+                xmlns CDATA #FIXED ''>
26
+
27
+        <!ELEMENT sj (#PCDATA)>
28
+        <!ATTLIST sj
29
+                xmlns CDATA #FIXED ''>

+ 7
- 0
ejemplos/mtbase_.dtd View File

@@ -0,0 +1,7 @@
1
+<!ELEMENT root (transicion+)>
2
+        <!ELEMENT transicion (qi|si|qj|sj|movimiento)>
3
+<!ELEMENT qi (#PCDATA)>
4
+<!ELEMENT si (#PCDATA)>
5
+<!ELEMENT qj (#PCDATA)>
6
+<!ELEMENT sj (#PCDATA)>
7
+<!ELEMENT movimiento (#PCDATA)>

+ 32
- 15
src/cl/cromer/mt/Automata.java View File

@@ -11,10 +11,21 @@ import org.w3c.dom.Document;
11 11
 
12 12
 import java.util.ArrayList;
13 13
 
14
+/**
15
+ * Clase que contiene método que guarda y ordena cada transición del archivo XML ya validado
16
+ */
17
+
14 18
 public class Automata {
15 19
 	private ArrayList<Estado> estados;
16 20
 	private ArrayList<Integer> estadosExistentes;
17 21
 
22
+	/**
23
+	 * Constructor de la clase Automata, organiza las etiquetas del XML en un array de estados
24
+	 * y filtra los subindices de cada estado obtenido
25
+	 *
26
+	 * @param document Document del XML
27
+	 */
28
+
18 29
 	public Automata(Document document) {
19 30
 		setEstados(new ArrayList<>());
20 31
 		for (int i = 0; i < document.getElementsByTagName("transicion").getLength(); i++) {
@@ -24,27 +35,13 @@ public class Automata {
24 35
 				int qj = Integer.parseInt(document.getElementsByTagName("qj").item(i).getTextContent());
25 36
 				char si = document.getElementsByTagName("si").item(i).getTextContent().charAt(0);
26 37
 				char sj = document.getElementsByTagName("sj").item(i).getTextContent().charAt(0);
27
-		        /*if(estados.isEmpty() && qi != qj){
28
-		            estados.add(qi, new Estado(qi));
29
-                    estados.add(qj, new Estado(qj));
30
-                }
31
-                else if(estados.isEmpty() && qi == qj) {
32
-                    estados.add(qi, new Estado(qi));
33
-                }*/
34 38
 				if (estados.size() <= qi) {
35 39
 					estados.add(qi, new Estado(qi));
36 40
 				}
37 41
 				if (estados.size() <= qj) {
38 42
 					estados.add(qj, new Estado(qj));
39 43
 				}
40
-				if (!estados.get(qi).createLink(si, estados.get(qj), sj, move)) {
41
-					if (qi == qj) {
42
-						System.out.println("Recursivo");
43
-					}
44
-					else {
45
-						System.out.println("En" + qi + " a " + qj + "Transicion para " + si + " ya esta creada");
46
-					}
47
-				}
44
+				estados.get(qi).createLink(si, estados.get(qj), sj, move);
48 45
 			}
49 46
 			else {
50 47
 				System.out.println("Movimiento invalido de cinta");
@@ -59,18 +56,38 @@ public class Automata {
59 56
 		}
60 57
 	}
61 58
 
59
+	/**
60
+	 * Retorna un lista de estados
61
+	 *
62
+	 * @return ArrayList de Estados
63
+	 */
62 64
 	public ArrayList<Estado> getEstados() {
63 65
 		return estados;
64 66
 	}
65 67
 
68
+	/**
69
+	 * Asigna una lista de estados
70
+	 *
71
+	 * @param estados Estados ya creados
72
+	 */
66 73
 	public void setEstados(ArrayList<Estado> estados) {
67 74
 		this.estados = estados;
68 75
 	}
69 76
 
77
+	/**
78
+	 * Retorna una lista de números que serán los subindices de los estados existentes
79
+	 *
80
+	 * @return estadosExistentes Lista de subindices
81
+	 */
70 82
 	public ArrayList<Integer> getEstadosExistentes() {
71 83
 		return estadosExistentes;
72 84
 	}
73 85
 
86
+	/**
87
+	 * Asigna una lista de estados existentes
88
+	 *
89
+	 * @param estadosExistentes
90
+	 */
74 91
 	public void setEstadosExistentes(ArrayList<Integer> estadosExistentes) {
75 92
 		this.estadosExistentes = estadosExistentes;
76 93
 	}

+ 56
- 0
src/cl/cromer/mt/Enlace.java View File

@@ -7,12 +7,23 @@
7 7
 
8 8
 package cl.cromer.mt;
9 9
 
10
+/**
11
+ * Clase que funciona como enlaze entre dos estados ó asi mismo
12
+ */
10 13
 public class Enlace {
11 14
 	private char si;
12 15
 	private char sj;
13 16
 	private char movimiento;
14 17
 	private Estado qj;
15 18
 
19
+	/**
20
+	 * Contructor de la clase
21
+	 *
22
+	 * @param si   Simbolo a analizar en la cadena
23
+	 * @param qj   Estado con que se enlaza
24
+	 * @param sj   Simbolo a escribir en la cadena
25
+	 * @param move Movimiento del indice de la cadena
26
+	 */
16 27
 	public Enlace(char si, Estado qj, char sj, char move) {
17 28
 		setMovimiento(move);
18 29
 		setSj(sj);
@@ -20,38 +31,83 @@ public class Enlace {
20 31
 		setSi(si);
21 32
 	}
22 33
 
34
+	/**
35
+	 * Retorna simbolo a analizar
36
+	 *
37
+	 * @return simbolo
38
+	 */
23 39
 	public char getSi() {
24 40
 		return this.si;
25 41
 	}
26 42
 
43
+	/**
44
+	 * Asigna simbolo a analizar
45
+	 *
46
+	 * @param si
47
+	 */
27 48
 	private void setSi(char si) {
28 49
 		this.si = si;
29 50
 	}
30 51
 
52
+	/**
53
+	 * Retorna simbolo a escribir
54
+	 *
55
+	 * @return simbolo
56
+	 */
31 57
 	public char getSj() {
32 58
 		return this.sj;
33 59
 	}
34 60
 
61
+	/**
62
+	 * Asigna simbolo a escribir
63
+	 *
64
+	 * @param sj
65
+	 */
35 66
 	public void setSj(char sj) {
36 67
 		this.sj = sj;
37 68
 	}
38 69
 
70
+	/**
71
+	 * Retorna el movimiento del indice de la cadena
72
+	 *
73
+	 * @return simbolo caracteristico (R,L,E ó *)
74
+	 */
39 75
 	public char getMovimiento() {
40 76
 		return this.movimiento;
41 77
 	}
42 78
 
79
+	/**
80
+	 * Asigna el movimiento del indice
81
+	 *
82
+	 * @param movimiento simbolo caracteristico (R,L,E ó *)
83
+	 */
43 84
 	public void setMovimiento(char movimiento) {
44 85
 		this.movimiento = movimiento;
45 86
 	}
46 87
 
88
+	/**
89
+	 * Retorna el estado con que se enlaza
90
+	 *
91
+	 * @return estado siguiente
92
+	 */
47 93
 	public Estado getQj() {
48 94
 		return qj;
49 95
 	}
50 96
 
97
+	/**
98
+	 * Asigna el estado con que se enlaza
99
+	 *
100
+	 * @param qj estado siguiente
101
+	 */
51 102
 	public void setQj(Estado qj) {
52 103
 		this.qj = qj;
53 104
 	}
54 105
 
106
+	/**
107
+	 * Retorna la función de transición definida en un String
108
+	 *
109
+	 * @return String con la función
110
+	 */
55 111
 	@Override
56 112
 	public String toString() {
57 113
 		return "," + si + ") = (q" + qj.getQ() + "," + sj + "," + movimiento + ")";

+ 32
- 0
src/cl/cromer/mt/Estado.java View File

@@ -8,23 +8,50 @@ package cl.cromer.mt;
8 8
 
9 9
 import java.util.ArrayList;
10 10
 
11
+/**
12
+ * Clase que almanecerá un estado con su subindices y sus enlaces adyacentes
13
+ */
11 14
 public class Estado {
12 15
 	private final int q;
13 16
 	private final ArrayList<Enlace> enlaces;
14 17
 
18
+	/**
19
+	 * Contructor de la clase
20
+	 *
21
+	 * @param q Subindice del estado
22
+	 */
15 23
 	public Estado(int q) {
16 24
 		this.q = q;
17 25
 		enlaces = new ArrayList<>();
18 26
 	}
19 27
 
28
+	/**
29
+	 * Retorna una lista con los enlaces de un estado
30
+	 *
31
+	 * @return ArrayList de Enlaces
32
+	 */
20 33
 	public ArrayList<Enlace> getEnlaces() {
21 34
 		return enlaces;
22 35
 	}
23 36
 
37
+	/**
38
+	 * Retorna el subindice asociado al estado
39
+	 *
40
+	 * @return Subindice
41
+	 */
24 42
 	public int getQ() {
25 43
 		return q;
26 44
 	}
27 45
 
46
+	/**
47
+	 * Crea un enlace entre dos estados ó a si mismo
48
+	 *
49
+	 * @param si Simbolo a analizar en la cadena
50
+	 * @param qj Estado adyacente
51
+	 * @param sj Simbolo que escribe en la cadena
52
+	 * @param move Movimiento del cabezal (indice de la cadena)
53
+	 * @return Verdadero si se creó, falso si ya existe
54
+	 */
28 55
 	public boolean createLink(char si, Estado qj, char sj, char move) {
29 56
 		if (enlaces.isEmpty()) {
30 57
 			enlaces.add(new Enlace(si, qj, sj, move));
@@ -38,6 +65,11 @@ public class Estado {
38 65
 		return true;
39 66
 	}
40 67
 
68
+	/**
69
+	 * Retorna un String con la/s función/es de transición asociado a un estado
70
+	 *
71
+	 * @return String con la/s función/es
72
+	 */
41 73
 	@Override
42 74
 	public String toString() {
43 75
 		StringBuilder _return = new StringBuilder();

+ 41
- 4
src/cl/cromer/mt/LeerXML.java View File

@@ -8,13 +8,15 @@
8 8
 package cl.cromer.mt;
9 9
 
10 10
 import org.w3c.dom.Document;
11
+import org.w3c.dom.NodeList;
11 12
 
13
+import javax.print.Doc;
12 14
 import javax.xml.parsers.DocumentBuilder;
13 15
 import javax.xml.parsers.DocumentBuilderFactory;
14 16
 import java.io.*;
15 17
 
16 18
 /**
17
- * Esta clase puede abrir y validar un archivo de XML. Se necesita un archivo mtbase.dtd
19
+ * Esta clase puede abrir y validar un archivo de XML. Se necesita un archivo mtbase_.dtd
18 20
  */
19 21
 class LeerXML {
20 22
 	/**
@@ -61,7 +63,10 @@ class LeerXML {
61 63
 			DocumentBuilder db = dbf.newDocumentBuilder();
62 64
 			documento = db.parse(archivo);
63 65
 			documento.getDocumentElement().normalize();
64
-			return documento;
66
+			if(validarEtiquetas(documento)){
67
+				return documento;
68
+			}
69
+			return null;
65 70
 		}
66 71
 		catch (Exception e) {
67 72
 			if (e.getMessage().contains(".dtd")) {
@@ -111,10 +116,10 @@ class LeerXML {
111 116
 			BufferedReader br = new BufferedReader(new FileReader(original));
112 117
 			BufferedWriter bw = new BufferedWriter(new FileWriter(temp));
113 118
 			if ((aux = br.readLine()).startsWith("<?xml")) {
114
-				bw.write(aux + "\n<!DOCTYPE root SYSTEM \"mtbase.dtd\">");
119
+				bw.write(aux + "\n<!DOCTYPE root SYSTEM \"mtbase_.dtd\">");
115 120
 			}
116 121
 			else {
117
-				bw.write("<!DOCTYPE root SYSTEM \"mtbase.dtd\">\n" + aux);
122
+				bw.write("<!DOCTYPE root SYSTEM \"mtbase_.dtd\">\n" + aux);
118 123
 			}
119 124
 			for (aux = ""; aux != null; aux = br.readLine()) {
120 125
 				if (!aux.startsWith("<!DOCTYPE")) {
@@ -128,4 +133,36 @@ class LeerXML {
128 133
 		}
129 134
 		return temp;
130 135
 	}
136
+
137
+	/**
138
+	 * Valida las etiquetas en el XML
139
+	 *
140
+	 * @param document XML a analizar
141
+	 *
142
+	 * @return Verdadero si esta correcto, caso contrario falso
143
+	 */
144
+	private boolean validarEtiquetas(Document document) {
145
+		NodeList etiquetas = document.getElementsByTagName("*");
146
+		for (int i = 0; i < etiquetas.getLength(); i++) {
147
+			switch (etiquetas.item(i).getNodeName()) {
148
+				case "root":
149
+					break;
150
+				case "transicion":
151
+					break;
152
+				case "qi":
153
+					break;
154
+				case "si":
155
+					break;
156
+				case "qj":
157
+					break;
158
+				case "sj":
159
+					break;
160
+				case "movimiento":
161
+					break;
162
+				default:
163
+					return false;
164
+			}
165
+		}
166
+		return true;
167
+	}
131 168
 }

+ 100
- 38
src/cl/cromer/mt/Maquina.java View File

@@ -9,6 +9,9 @@ package cl.cromer.mt;
9 9
 
10 10
 import org.w3c.dom.Document;
11 11
 
12
+/**
13
+ * Clase de la Maquina de Turing que renocerá algún asociado a las transiciones escritas en un archivo XML
14
+ */
12 15
 public class Maquina {
13 16
 	private final Automata maquina;
14 17
 	private Estado estadoActual;
@@ -16,79 +19,120 @@ public class Maquina {
16 19
 	private String cintaAnterior;
17 20
 	private int cabezal;
18 21
 
22
+	/**
23
+	 * Constructor de la clase
24
+	 *
25
+	 * @param document Document asociado al XML
26
+	 */
19 27
 	public Maquina(Document document) {
20 28
 		maquina = new Automata(document);
21 29
 		reset();
22 30
 	}
23 31
 
32
+	/**
33
+	 * Retorna la maquina de Turing
34
+	 *
35
+	 * @return maquina asociado a alguna función de transición
36
+	 */
24 37
 	public Automata getMaquina() {
25 38
 		return maquina;
26 39
 	}
27 40
 
41
+	/**
42
+	 * Retorna el estado en que esta la maquina
43
+	 *
44
+	 * @return estado actual
45
+	 */
28 46
 	public Estado getEstadoActual() {
29 47
 		return estadoActual;
30 48
 	}
31 49
 
50
+	/**
51
+	 * Asigna un estado actual que esta la maquina en un instante de tiempo
52
+	 *
53
+	 * @param estadoActual
54
+	 */
32 55
 	public void setEstadoActual(Estado estadoActual) {
33 56
 		this.estadoActual = estadoActual;
34 57
 	}
35 58
 
59
+	/**
60
+	 * Retorna un enlace en que la maquina asocio a la cadena ingresada y al cabezal que se encuentra
61
+	 *
62
+	 * @return el enlace actual
63
+	 */
36 64
 	public Enlace getEnlaceActual() {
37 65
 		return enlaceActual;
38 66
 	}
39 67
 
68
+	/**
69
+	 * Asigna un enlace actual que esta la maquina en un instante de tiempo
70
+	 *
71
+	 * @param enlaceActual
72
+	 */
40 73
 	public void setEnlaceActual(Enlace enlaceActual) {
41 74
 		this.enlaceActual = enlaceActual;
42 75
 	}
43 76
 
77
+	/**
78
+	 * Retorna la cadena anterior a que la maquina hiciera cambios
79
+	 *
80
+	 * @return la cadena anterior
81
+	 */
44 82
 	public String getCintaAnterior() {
45 83
 		return cintaAnterior;
46 84
 	}
47 85
 
86
+	/**
87
+	 * Asigna la cadena anterior a que la maquina hiciera cambios
88
+	 * @param cintaAnterior
89
+	 */
48 90
 	public void setCintaAnterior(String cintaAnterior) {
49 91
 		this.cintaAnterior = cintaAnterior;
50 92
 	}
51 93
 
94
+	/**
95
+	 * Retorna el indice en que se ubica en la cadena (Cabezal)
96
+	 *
97
+	 * @return un número asociado
98
+	 */
52 99
 	public int getCabezal() {
53 100
 		return cabezal;
54 101
 	}
55 102
 
103
+	/**
104
+	 * Asigna el indice en que se ubica en la cadena (Cabezal)
105
+	 *
106
+	 * @param cabezal
107
+	 */
56 108
 	public void setCabezal(int cabezal) {
57 109
 		this.cabezal = cabezal;
58 110
 	}
59 111
 
112
+	/**
113
+	 * Inicializa atributos
114
+	 */
60 115
 	public void reset() {
61
-		setEstadoActual(maquina.getEstados().get(0));
116
+		setEstadoActual(getMaquina().getEstados().get(0));
62 117
 		setEnlaceActual(null);
63 118
 		setCintaAnterior("");
64 119
 		setCabezal(0);
65 120
 	}
66 121
 
122
+	/**
123
+	 * Comprueba que si la cadena ingresada es reconocida por la maquina
124
+	 *
125
+	 * @param cinta cadena ingresada por el usuario
126
+	 * @param estadoFinal Arreglo de estados finales, también ingresados por usuario
127
+	 * @return Verdadero si lo reconoce, caso contrario, falso
128
+	 */
67 129
 	public boolean comprobarCadena(StringBuilder cinta, int[] estadoFinal) {
68
-		//estadoActual = maquina.getEstados().get(0);
69 130
 		int i;
70 131
 		for (i = 0; i < getEstadoActual().getEnlaces().size(); i++) {
71 132
 			if (getEstadoActual().getEnlaces().get(i).getSi() == cinta.charAt(getCabezal())) {
72 133
 				setEnlaceActual(getEstadoActual().getEnlaces().get(i));
73 134
 				cinta.setCharAt(getCabezal(), getEnlaceActual().getSj());
74
-				switch (getEnlaceActual().getMovimiento()) {
75
-					case 'L': {
76
-						setCabezal(getCabezal() - 1);
77
-						if (getCabezal() == (-1)) {
78
-							cinta.insert(0, "#");
79
-							setCabezal(getCabezal() + 1);
80
-						}
81
-						break;
82
-					}
83
-					case 'R': {
84
-						setCabezal(getCabezal() + 1);
85
-						if (getCabezal() == cinta.length()) {
86
-							cinta.insert(getCabezal(), "#");
87
-						}
88
-						break;
89
-					}
90
-					default: {/*Se mantiene*/}
91
-				}
135
+				movimientoCabezal(getEnlaceActual().getMovimiento(),cinta);
92 136
 				setEstadoActual(getEnlaceActual().getQj());
93 137
 				i = -1;
94 138
 			}
@@ -103,6 +147,15 @@ public class Maquina {
103 147
 		return false;
104 148
 	}
105 149
 
150
+	/**
151
+	 * Comprueba que si el simbolo en la cadena, identificado por el cabezal
152
+	 * es reconocido por la maquina. Este guarda la cadena anterior, estado actual y
153
+	 * un enlace actual
154
+	 *
155
+	 * @param cinta Cadena ingresada por el usuario
156
+	 * @param estadoFinal Arreglo de estados finales, también ingresados por usuario
157
+	 * @return
158
+	 */
106 159
 	public boolean comprobarCadenaS2S(StringBuilder cinta, int[] estadoFinal) {
107 160
 		setCintaAnterior(cinta.toString());
108 161
 		int i;
@@ -111,24 +164,7 @@ public class Maquina {
111 164
 				setEnlaceActual(getEstadoActual().getEnlaces().get(i));
112 165
 				setEstadoActual(getEnlaceActual().getQj());
113 166
 				cinta.setCharAt(getCabezal(), getEnlaceActual().getSj());
114
-				switch (getEnlaceActual().getMovimiento()) {
115
-					case 'L': {
116
-						setCabezal(getCabezal() - 1);
117
-						if (getCabezal() == (-1)) {
118
-							cinta.insert(0, "#");
119
-							setCabezal(getCabezal() + 1);
120
-						}
121
-						break;
122
-					}
123
-					case 'R': {
124
-						setCabezal(getCabezal() + 1);
125
-						if (getCabezal() == cinta.length()) {
126
-							cinta.insert(getCabezal(), "#");
127
-						}
128
-						break;
129
-					}
130
-					default: {/*Se mantiene*/}
131
-				}
167
+				movimientoCabezal(getEnlaceActual().getMovimiento(),cinta);
132 168
 				return true;
133 169
 			}
134 170
 		}
@@ -140,5 +176,31 @@ public class Maquina {
140 176
 		}
141 177
 		return false;
142 178
 	}
179
+
180
+	/**
181
+	 * Realiza el movimiento correspondiente a base del caracter guardado en [movimiento]
182
+	 * @param mov caracter asociado al movimiento
183
+	 * @param cinta Cadena ingresada por el usuario
184
+	 */
185
+	private void movimientoCabezal(char mov,StringBuilder cinta) {
186
+	switch (mov) {
187
+		case 'L': {
188
+			setCabezal(getCabezal() - 1);
189
+			if (getCabezal() == (-1)) {
190
+				cinta.insert(0, "#");
191
+				setCabezal(getCabezal() + 1);
192
+			}
193
+			break;
194
+		}
195
+		case 'R': {
196
+			setCabezal(getCabezal() + 1);
197
+			if (getCabezal() == cinta.length()) {
198
+				cinta.insert(getCabezal(), "#");
199
+			}
200
+			break;
201
+		}
202
+		default: {/*Se mantiene*/}
203
+	}
204
+}
143 205
 }
144 206
 

Loading…
Cancel
Save