Bueno aqui dejo una imagen sobre lo que vendria siendo una Maquina de Estado Finito
Y ya de ahi se crean las Tablas F & G, F son las entradas y a donde nos enviaran y G, las salidas que obtendriamos
Bueno ya sin mas aqui les dejo mi code, por si les interesa n_n, o algo que sea de utilidad.
CODIGO
Clase Consola:
Código
package MEF; /** * @Author Victor */ public class Consola { { BASE Obj = new BASE(); //Obj.convertirbybase(0); int base = 0; do{ base = read.dataInt("Teclee Base 2 - 9: ") ; }while(base < 2); //String [][] g = Obj.Llenar(base, 0); Obj.SOP(Obj.imprimir(base, f, g)); Obj.SOP("\n\n"); a = read.data("Teclee Primer valor: "); b = read.data("Teclee Segundo valor: "); Obj.SOP("\nLa Suma de " + a + " y " + b + " es igual a: " + suma); } }
Clase BASE
Código
package MEF; /** * * @author Victor */ public class BASE { int pos = 1; { String n,nn; while(a.length() > b.length()) { b = "0" + b; } while(a.length() < b.length()) { a = "0" + a; } for(int x = (a.length()-1); x>=0; x--) { for(int t = 0; t<f[0].length; t++) { nn = (f[0][t]); if(n.equals(nn)) { r = valor(t,f,g) + r; } } } if(pos == 2) r = "1"+r; return r; } { if (pos == 1) { if(f[1][columna] != "SA") { pos = 2; } m = g[1][columna]; }else{ if(f[2][columna] == "SA") { pos = 1; } m = g[2][columna]; } return m; } { k = k + ("\nTABLA F - BASE:" + base+"\n"); for(int x = 0; x<3; x++) { if(x == 1) k = k + ("SA|"); else if(x == 2) k = k + ("CA|"); else k = k + ("EI|"); for(int xx = 0; xx<(base*base); xx++) { k = k + (f[x][xx] + "|"); } k = k + ("\n"); } k = k + ("\nTABLA G - BASE:" + base+"\n"); for(int x = 0; x<3; x++) { if(x == 1) k = k + ("SA|"); else if(x == 2) k = k + ("CA|"); else k = k + ("EI|"); for(int xx = 0; xx<(base*base); xx++) { while(g[0][xx].length() > g[x][xx].length()) { g[x][xx] = " " + g[x][xx]; } k = k + (g[x][xx] + "|"); } k = k + ("\n"); } return k; } //Llenando la matriz { //Creamos una matriz la cual luego llenaremos int n=0,xx = 0; //Vemos que matriz es la que llenaremos f=0 o g=1 if(tipo == 0) { for(int x = 0; x<3; x++) { xx = 0; for(int i = 0; i<base; i++) { for(int ii = 0; ii<base; ii++) { if(x == 1) { if((i+ii) < base) f[x][xx] = "SA"; else f[x][xx] = "CA"; xx++;; }else if(x == 2){ if(((i+ii)+1) < base) f[x][xx] = "SA"; else f[x][xx] = "CA"; xx++;; }else{ f[x][n] = convertirnumero(i) + "" + convertirnumero(ii); n++; } } } } m = f; }else{ for(int x = 0; x<3; x++) { xx = 0; for(int i = 0; i<base; i++) { for(int ii = 0; ii<base; ii++) { if(x == 1) { if((i+ii) < base) g[x][xx] = convertirnumero(i+ii); else g[x][xx] = convertirnumero(g(base,i,ii)); xx++;; }else if(x == 2){ if(((i+ii)+1) < base) g[x][xx] = convertirnumero((i+ii+1)); else g[x][xx] = convertirnumero(g1(base,i,ii)); xx++;; }else{ g[x][n] = convertirnumero(i) + "" + convertirnumero(ii); n++; } } } } m = g; } return m; } { } private static int g(int base, int i, int ii) { return (int)((i+ii)-base); } private static int g1(int base, int i, int ii) { return (int)((i+ii+1)-base); } { //System.out.println("\n" + i); for(int n = 0; n<(n+letras.length); n++) { if(i == n) { if(n >= 10) return letras[n-10]; else } } return "0"; } }
Clase read
Código
package MEF; /** * * @author cryptt3r */ import java.io.*; public class read { public static boolean error; try { // Definir un flujo de caracteres de entrada: flujoE // Leer. La entrada finaliza al pulsar la tecla Entrar sdato = flujoE.readLine(); } } return sdato; // devolver el dato tecleado } try { error=false; if (val<-32768||val>32767) error=true; return val; } } } try { } } } try { } } } try { return f.floatValue(); } } } try { return d.doubleValue(); } } } /*public static char dataChar(String message){ try { Char d = new Char(data(message)); return d.charValue(); } catch (NumberFormatException e){ return Char.NaN; } }*/ }
Solamente me falto, hacer la comprobacion de que los numeros que ingresemos ninguno sea mayor a la base, sorry se me paso eso, pero lo pueden hacer ahi mientras leen.