Cambio para recibir más de un estado final

This commit is contained in:
carlos 2017-07-03 16:07:54 +00:00
parent 5a04629ac7
commit 4196ce4f61
2 changed files with 31 additions and 12 deletions

View File

@ -15,7 +15,8 @@ public class LoteController {
protected void runLote() throws Exception {
Scene scene = vboxLote.getScene();
Maquina maquina = (Maquina) scene.getUserData();
if (maquina.comprobarCadena(new StringBuilder("000111###"), 5)) {
int[] estados = {5};
if (maquina.comprobarCadena(new StringBuilder("000111###"),estados)) {
MT.mostrarMensaje("Resultado", "Reconce");
}
else {

View File

@ -11,23 +11,33 @@ import org.w3c.dom.Document;
class Maquina {
private final Automata maquina;
private Estado estadoactual;
private Enlace enlaceactual;
private String cintaanterior;
Maquina(Document document) {
maquina = new Automata(document);
estadoactual = maquina.getEstados().get(0);
enlaceactual = null;
cintaanterior = "";
}
Automata getMaquina() {
return maquina;
}
Automata getMaquina() {return maquina;}
boolean comprobarCadena(StringBuilder cinta, int estadoFinal) {
Estado qi = maquina.getEstados().get(0);
public Estado getEstadoactual() {return estadoactual;}
public Enlace getEnlaceactual() {return enlaceactual;}
public String getCintaanterior() {return cintaanterior;}
boolean comprobarCadena(StringBuilder cinta, int[] estadoFinal) {
//estadoactual = maquina.getEstados().get(0);
int cabezal = 0;
int i;
for (i = 0; i < qi.getEnlaces().size(); i++) {
if (qi.getEnlaces().get(i).getSi() == cinta.charAt(cabezal)) {
cinta.setCharAt(cabezal, qi.getEnlaces().get(i).getSj());
switch (qi.getEnlaces().get(i).getMovimiento()) {
for (i = 0; i < estadoactual.getEnlaces().size(); i++) {
if (estadoactual.getEnlaces().get(i).getSi() == cinta.charAt(cabezal)) {
cinta.setCharAt(cabezal, estadoactual.getEnlaces().get(i).getSj());
switch (estadoactual.getEnlaces().get(i).getMovimiento()) {
case 'L': {
cabezal--;
if (cabezal == (-1)) {
@ -45,11 +55,19 @@ class Maquina {
}
default: {/*Se mantiene*/}
}
qi = qi.getEnlaces().get(i).getQj();
estadoactual = estadoactual.getEnlaces().get(i).getQj();
i = -1;
}
}
return (qi.getQ() == estadoFinal);
for(i=0;i<estadoFinal.length;i++){
if(estadoactual.getQ() == estadoFinal[i]) return true;
}
return false;
}
boolean comprobarCadenaS2S(StringBuilder cinta, int[] estadoFinal){
cintaanterior = cinta.toString();
return false; // Programando ahora
}
}