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 { protected void runLote() throws Exception {
Scene scene = vboxLote.getScene(); Scene scene = vboxLote.getScene();
Maquina maquina = (Maquina) scene.getUserData(); 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"); MT.mostrarMensaje("Resultado", "Reconce");
} }
else { else {

View File

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