Paso 4: Introducción a la lógica de la máquina del estado
Si usted no está familiarizado con o no has usado la lógica de la máquina del estado en la programación, es la forma más fácil para dividir problemas complejos en Estados manejables y las transiciones de estado. Una de las maneras más fáciles para implementar una máquina de estado es utilizar una instrucción switch .
Ejemplo de una máquina de estado mediante una sentencia switch:
switch(state) {case INITIAL: // process INITIAL state break; case STATE1: // process STATE1 state break; case CLEAR: clearAll(); state = INITIAL; break; default: break; }
Dependiendo del estado, hay sólo unas teclas válidas. Permite echar un vistazo en el primer estado llamado inicial. Como se puede ver en el diagrama de estado el estado inicial sólo puede tener las siguientes teclas: 0-9 y ' *' (asterisco), otra cosa es un error de formato.
Estado Teclas Siguiente estado Comentario Inicial 0-9 START1 X
* WILDCARD1 * @
Otra cosa inicial formato Error
Aquí está un fragmento de código que muestra cómo implementé el estado inicial:
char key = keypad.getKey ();<br> if (key != NO_KEY) { switch(state) { case INITIAL: // X if(validKeys0to9(key)) { pos = displayKey(key, pos); storeKey(key); state = START1; } else if (validWildCard(key)) { // *@ pos = displayKey(key, pos); state = WILDCARD1; } else { invalidFormat(); clearAll(); } break;
Como veis que he creado algunas funciones auxiliares para hacer el código fácil de leer.
// Validate key *<br>// return true if valid, else false int validWildCard(int key) { int valid=0; switch(key) { case '*': valid=1; break; } return valid; } <br>// Validate key 0-9 // return true if valid, else false int validKeys0to9(int key) { int valid=0; switch(key) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': valid=1; break; } return valid; }