这里设计一个简单的练习,使用状态机思想实现,分别使用了swift,OC,C,PHP语言实现
题目:1到10000遍历,开始-打印奇数-遇到7的倍数开始打印偶数--遇到10的倍数打印奇数 //部分结果:1 3 5 8 11 13 16 18 22 24 .....
swift实现
enum StateType{ //奇数,偶数 case state_Odd,state_Even }
import UIKit //开始-打印奇数-遇到7的倍数开始打印偶数--遇到10的倍数打印奇数 //部分结果:1 3 5 8 11 13 16 18 22 24 class ViewController: UIViewController { //当前状态设置初始值 var current_state = StateType.state_Odd override func viewDidLoad() { super.viewDidLoad() for i in 1...10000{ //for循环或while(true)驱动状态机的运转 //状态机实现 switch current_state { case .state_Odd: if i%7==0 { //被7整除之后,改变状态并在另一状态中处理i current_state = StateType.state_Even } else { if i%2 != 0 { //状态不变,打印奇数 println("\(i) ") } } case .state_Even: if i%10==0 { //被10整除之后,改变状态并在另一状态中处理i current_state = StateType.state_Odd } else { //状态不变,打印偶数 if i%2 == 0 { println("\(i) ") } } } } // Do any additional setup after loading the view, typically from a nib. } }
OC实现
enum StatusType{ s_Odd, s_even //奇数偶数枚举 };
//初始化当前状态 static int currentState = s_Odd; - (void)viewDidLoad { [super viewDidLoad]; //for循环或while(true)驱动状态机的运转 for(int i=1;i<=1000;i++) { //状态机实现 switch (currentState) { case s_Odd: { if (i%7==0) { //被7整除之后,改变状态并在另一状态中处理i currentState = s_even; } else { if (i%2 != 0) { //状态不变,打印奇数 NSLog(@"%d ",i ); } } break; case s_even: if (i%10==0) { //被10整除之后,改变状态并在另一状态中处理i currentState = s_Odd; } else { //状态不变,打印偶数 if (i%2 == 0) { NSLog(@"%d ",i ); } } break; } } } // Do any additional setup after loading the view, typically from a nib. }
C,PHP实现方式
enum StatusType { S_Odd, S_Even };
void beginMachine() { //如果编程语言没有enum,如PHP,Javascript等,可以定义俩变量 //$S_Odd=0,$S_Even=1;这种方式解决 int currentState = S_Odd; //for循环或while(true)驱动状态机的运转 for(int i=1;i<=1000;i++) { //状态机实现 switch (currentState) { case S_Odd: { if (i%7==0) { //被7整除之后,改变状态并在另一状态中处理i currentState = S_Even; } else { if (i%2 != 0) { //状态不变,打印奇数 printf("%d ",i ); } } break; case S_Even: if (i%10==0) { //被10整除之后,改变状态并在另一状态中处理i currentState = S_Odd; } else { //状态不变,打印偶数 if (i%2 == 0) { printf("%d ",i ); } } break; } } } }
总结:
1,状态机首先要确定状态数作为枚举值
2,有当前状态变量
3,switch case 来在特定情况下改变当前状态
|
请发表评论