Originariamente inviato da slyv
qualcuno può fornirmi indicazioni su come creare un programmino java che sfrutti una macchina a stati?
Beh, detto in maniera abbastanza semplice (e senza entrare nei formalismi perché non ne sarei capace), una macchina a stati è un sistema in cui ci sono un certo numero di stati e in cui ci sono delle regole specifiche che in base allo stato attuale e al dato in "input" da gestire dicono quale è il prossimo stato a cui passare.
Esempio banale: ho una stringa:
codice:
"ciao prova macchina stati"
voglio stampare solo le lettere iniziali di ogni parola. Si può pensare di avere 2 stati 0 e 1, dove 0 indica lo stato relativo allo spazio e 1 indica lo stato relativo a un non-spazio.
Se sono in stato 0 e trovo uno spazio, resto nello stato 0 mentre se trovo un non-spazio passo a stato 1.
Se sono in stato 1 e trovo uno spazio, ritorno allo stato 0 mentre se trovo ancora un non-spazio resto nello stato 1.
Ok, tradotto in codice Java:
codice:
class ProvaMacchinaStati
{
public static void main (String[] args)
{
String str = "ciao prova macchina stati";
int stato = 0;
for (int i = 0; i < str.length (); i++)
{
char ch = str.charAt (i);
switch (stato)
{
case 0:
if (!Character.isSpaceChar (ch))
{
System.out.println ("Iniziale: " + ch);
stato = 1;
}
break;
case 1:
if (Character.isSpaceChar (ch))
stato = 0;
break;
}
}
}
}
Output:
codice:
Iniziale: c
Iniziale: p
Iniziale: m
Iniziale: s
È un esempio banale/stupido ma pur sempre di una macchina a stati.