20. januar 2007 - 17:04Der er
11 kommentarer og 1 løsning
hjælp til tilstandsmaskine
hey.. er igang med at lave en simpel tilstandsmaskine, har da også fået den til at skifte tilstande efter hvilket tal der kommer ind i den, tallene bliver hentet fra en ArrayList, men selvom der er 5 tal i, så printer den kun tilstandene for f.eks de første 2 tal ud, nogle gange er det de første 4 tal den får ind.. men jeg har stirret mig blindt på koden og kan simpelthen ikke se hvad der er galt, så ville håbe der var nogle af jer der kunne det.
class tilstand { private const int START_STATE = 1; private const int LESSTHENSTATE = 2; private const int ZEROSTATE = 3; private const int MORETHENSTATE = 4;
private int state = START_STATE; ArrayList source;
private int startindex = 0;
public void tilstandsmaskine() { source = makesource(); states(); }
private ArrayList makesource() { ArrayList list = new ArrayList();
for (int i = 0; i <=2; i++) { list.Add(i); } return list; }
public void states() { while (startindex < source.Count) { int c = (int)source[startindex++];
switch (state) { case START_STATE: if (c == 0) { state = ZEROSTATE;
} else if (c<0) { state = LESSTHENSTATE; } else if (c > 0) { state = MORETHENSTATE; } break;
case LESSTHENSTATE: Console.WriteLine("mindre end 0"); state = START_STATE; break;
case ZEROSTATE: Console.WriteLine("lig med 0"); state = START_STATE; break;
case MORETHENSTATE: Console.WriteLine("større end 0"); state = START_STATE; break;
default: Console.WriteLine("fejl i input"); break; } }
ja, jeg tilføjer kun 3 elementer, men hvis du f.eks tilføjer fra -2 til 2,
så bliver resultatet :
mindre end 0 lig med 0
det er på sin vis også rigtigt nok, da den jo så starter på -1, og så kommer til 0. men den viser aldrig de sidste 3, hvor der gerne skulle stå større end 0
altså nu har jeg testet lidt og det ser ud som om din maskine gør hvad den skal. problemet er jo at den kun hver anden gang test på selve elementerne i arraylisten.
flow for 4 elementer: første element ryger altid ind i start_state. næste gennemløb ryger ind i en af de andre derefter start_state igen. en af de andre. osv. Det er vel ikke det gennemløb du vil have i tilstandsmaskinen ?
det var meningen at den skulle modtage første element, teste på det, og gå ned i den state der passer på værdien, så tilbage til og teste på det næste element, og så ryger den ned i den state der passer på værdien igen.
hmm det så ud til at hjælpe lidt på det, men hvis jeg så har -2,-1,0,1,2 i min list, så kommer den kun til 1 hvor den skriver størrer end 0, men den kommer aldrig med det sidste størrer end 0!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.