遇到一个问题:
这样的,现在有一个函数,它有四种处理方法,A,B,C,D,它根据标志位选一个走下去,而在 A 中它也有四种方法,A1,B1,C1,D1,如此下去,A1中也有四种方法,,,,,,有五层,到第五层的时要返回到A,B,C,D的这个环,再继续 A 中的A1,B1,C1,D1, ,B,C,B1,C1,,,,,,,,处理方法类似但又不一样,D,D1完全相同,并且要求要立即结束,也就是不能结束后回到上一层,
请大家帮我想个解答方法.注意函数面对四种选择时要不停的查询四个标志位,这个是系统有要求的,
我用的笨方法算的,没学过计算机,看起来这像个树,
问题是系统要求,最好不要递归,用GOTO,也不行,让我烦躁的是那个D 因为要不停查询,我用的是DO *** WHILE** 所以总是一结束就回到上一层,郁闷!!!!!!!!!!!!
这是一个标准的状态机思路
如果要在多层间嵌套一般是得用GOTO,因为这样的效率最高,也是GOTO存在的原因之一.
switch (StateMachin)
{
case A:
{
//do sth && State change
break;
}
case B:
{
break;
}
case C:
{
break;
}
...
case A1:
{
break;
}
case B1:
{
break;
}
....
default:
}
楼上哥们,我没学过状态机,但我看你这个和SWITCH CASE结构有什么区别啊
再说了,一个SWITCH 不能解决问题啊,它有五层呢,说白了就是要根据A,A1,A2,,,,,来决定是哪一个的B,C,D,B1,C1,D1,它们的标志位只有四个,没那么多,
问了很多人都说用状态机,谁能详细点说呢,
状态机这个学术点了,说白了就是从代码的角度去看你的过程逻辑.
你的过程是从一个"状态"经过一个的处理,触发,转移到另一个状态.
用代码怎么表达?
你可以这样
IF A
DOSTH
ENDIF
IF B
DOSTH
ENIF
对吧?对应A/B做不同的事
那用更形象的表达方式呢?
那是把你的对象整体看成一个东西,以不同的标志(可以为一些特殊值)然后处理该状态下要做的东西,外加管理好状态迁移
比如:
我,有上班,在家.这两个状态
那我可以这样来表示
#define ONWORK 1
#define ATHOME 2
unsigned char MEStateMachin = ATHOME;
...
switch (MEStateMachin)
{
case ONWORK:
{
DOSTH();//做事,里面也可以有不同的状态,可以是新的,比如我做别的事有开始做,正在做,做完,等
HAVELUCH();//吃午饭
DOSTH();
if (Finish())
{
GOHOME();
MEStateMachin = ATHOME;//状态迁移
}
}
case ATHOME:
{
//思路同上
}
default:
{
//异常
}
}
状态机一般只在本层面上工作,不传入下一层状态,不然会太复杂,调试的时候可能要郁闷
要进入下一层,那就用新的一组状态了.别不舍得
不知道我说清楚没有?
你的意思是不是说在chang stage那里该边到自己所要的状态