Stap 4: Inleiding tot de logica van de Machine staat
Als u niet bekend bent met of nog niet staat machine logica in de programmering gebruikt, is het de gemakkelijkste manier om complexe problemen om in te breken beheersbaar Staten en staat overgangen. Een van de eenvoudigste manieren om een statusmachine is een instructie switch te gebruiken.
Voorbeeld van een statusmachine met behulp van een switch statement:
switch(state) {case INITIAL: // process INITIAL state break; case STATE1: // process STATE1 state break; case CLEAR: clearAll(); state = INITIAL; break; default: break; }
Afhankelijk van de staat zijn er alleen een paar geldige sleutels en waarden. Laat een kijkje nemen op de eerste staat met de naam van de eerste. Zoals je uit het diagram staat zien kunt de begintoestand kan slechts hebben de volgende sleutels: 0-9 en ' *' (sterretje), anders is het een bestandsfout.
Staat Toetsen Volgende staat Commentaar Eerste 0-9 Begindatum1 X
* JOKERTEKEN1 * @
Iets anders initiële opmaken fout
Hier is een stukje van de code tonen hoe ik de begintoestand geïmplementeerd:
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;
Zoals je kunt zien heb ik sommige hulpfuncties zodat de code gemakkelijk te lezen.
// 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; }