开发经验之状态机思想

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

时间: 2024-08-20 23:22:45

开发经验之状态机思想的相关文章

9、C_链表 &amp; 状态机与多线程

4.9.1.链表的引入 4.9.1.1.从数组的缺陷说起 数组有2个缺陷:一个是数组中所有元素的类型必须一致:第二个是数组的元素个数必须事先制定并且一旦指定之后不能更改. 如何解决数组的2个缺陷:数组的第一个缺陷靠结构体去解决.结构体允许其中的元素的类型不相同,因此解决了数组的第一个缺陷.所以说结构体是因为数组不能解决某些问题所以才发明的. 如何解决数组的第二个缺陷?我们希望数组的大小能够实时扩展.譬如我刚开始定了一个元素个数是10,后来程序运行时觉得不够因此动态扩展为20.普通的数组显然不行,

使用ISE/ModelSim显示状态机转移图

用状态机思想编写的verilog代码生成状态机图会很方便检查和调试,quartus好像可以直接生成,ISE不行,需要用modelsim,步骤如下. 右键单击Simulate Behavioral Model,选择Process Properties.然后把Property display level改为Advanced,在Other VSIM Command Line Options下面,输入-fsmdebug –coverage这两个选项(务必输入,否则ModelSim无法产生FSM视图):

策略模式的孪生兄弟——对状态模式的深度复习总结

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的总结知识点如下: 和策略模式的比较 状态模式概念和例子 应用场景 责任链模式和状态模式对比 一种代码优化的思路 java.util.Iterator里也有状态模式的影子 状态模式的优缺点 有限状态机及其应用 前面有总结——策略模式,之前早就觉得策略和状态设计模式有一些相似…… 接口的常用用法都有什么?策略设计模式复习总结 我知道策略模式是对象的行为模式,其实就是对一系列级别平等的算法的封装,它不关心算法实现,让客户端去动态的

状态与策略——审批操作的两种方案

审批操作是ERP或OA系统中必不可少的功能之一.这里介绍两种我设计的用于审批操作的方案,并借此就"状态模式"与"策略模式"提出一点自己的理解.    别问我为什么不使用工作流引擎等工具来实现审批功能.做第一版方案时,我孤陋寡闻得并不知道有这个东西.后来引入工作流框架会导致学习曲线骤然上扬,不太划算. 背景 背景无需过多介绍,不外乎有一些数据/任务/请求,需要由领导们点一下头或者按钮. 思路 由于孤陋寡闻,在得到需求之后,我第一反应不是"工作流",

20141128

职责单一思想,状态机思想,工厂思想,单例思想,订阅者思想,prmise思想,模块化思想,代理思想,表驱动思想 优雅地操作DOM元素,结合,工厂思想,代理思想,状态机思想.工厂思想,体现在html模板,js类.这样你就能做多个 代理思想,体现在,业务代码不直接操作DOM,是通过一个代理对象操作. 状态机思想,体现在把web组件,分为组件状态,组件行为,用户行为.组件行为修改组件 状态,用户行为来调用组件行为. promise思想,使得异步回调函数,不用嵌套,可以线性化. 订阅者思想,可以更加优雅地

C语言课程设计

目录 实现目的 游戏玩法介绍 实现流程与作品架构 任务列表及贡献度 总结感想 作品源码与仓库地址(附页) 资料引用与出处(附页) 实现目的 2048,作为一款极其经典的游戏,从发行到现在,已经有了极多的版本和玩法,各种优秀应用游戏层出不穷. 本游戏注重"视觉展现效果和更快速的动画".注重数据储存,是一种对于算法和 UI 设计有一定要求的应用设计. 本小组秉承课程所学与外部优秀知识技术相结合的观念,多人合作,共同研究学习. 以 C 语言为基础.C++ 语言库函数为辅助.Windows 程

状态机(程序设计思想)简单介绍

本文出处:http://blog.csdn.net/eager7/article/details/8517827 状态机思路在单片机程序设计中的应用 状态机的概念状态机是软件编程中的一个重要概念.比这个概念更重要的是对它的灵活应用.在一个思路清晰而且高效的程序中,必然有状态机的身影浮现. 比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态:再触发另一个键后切换到C状态,或者返回到A状态.这就是最简单的按键状态机例子.实际的按键解析程序会比这更复杂些,但这

08-FPGA状态机设计实例——小梅哥FPGA设计思想与验证方法视频教程配套文档

芯航线--普利斯队长精心奉献 ? 实验目的:1.学习状态机的相关概念 2.理解一段式.两段式以及三段式状态机的区别以及优缺点 实验平台:芯航线FPGA核心板 实验原理: 状态机全称是有限状态机(finite-state machine,缩写:FSM)是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型. 状态机分为摩尔(Moore)型有限状态机与米利(Mealy)型有限状态机.摩尔状态机输出是只由输入确定的有限状态机(不直接依赖于当前状态).米利有限状态机的输出不止与其输入有关还于它的

【学习笔记】【OC语言】面向对象思想

一.面向对象和面向过程思想OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想1.面向对象和面向过程的区别1>以用电脑听歌为例子面向过程打开电脑播放电脑中的歌曲关闭电脑 2>面向对象(不是相亲的“对象”)电脑开机播放歌曲关机 2.区别分析面向过程关注的是解决问题需要哪些步骤:面向对象关注的是解决问题需要哪些对象没有开发经验很难感受到它们的区别,两种思想都能达到解决问题的目的,但是解决思路不一样 现实生活中面向对象的例子想打电话\发短信 找手机,不用分析电话要怎样才能拨