zoukankan      html  css  js  c++  java
  • 开发经验之状态机思想,分别使用了swift,OC,C,PHP语言实现

    这里设计一个简单的练习,使用状态机思想实现,分别使用了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 来在特定情况下改变当前状态

  • 相关阅读:
    在Windows Mobile 中利用 WebRequest 下载文件并获得响应头的信息信息
    Windows Mobile使用红外线传输文件
    在Windows mobile中学习串口编程
    关于字符编码、对象传递、文件传递、字符串传递、 TcpClient、TcpListener的又一个应用
    在vs2010中可以很方便的打包桌面程序和同一解决方案中一个项目引用另外一个项目的问题
    浅析C#的事件处理和自定义事件
    Silverlight学习教程
    类型“Microsoft.WindowsMobile.IApplicationLauncher”在未被引用的程序集中定义
    (关于Widows Mobile版本)关于字符编码、对象传递、文件传递、字符串传递、 TcpClient、TcpListener、 StreamWriter、StreamReader、 NetworkStream
    ASP.NET MVC 学习
  • 原文地址:https://www.cnblogs.com/huntaiji/p/4089074.html
Copyright © 2011-2022 走看看