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

开发经验之状态机思想,分别使用了swift,OC,C,PHP语言实现的更多相关文章

  1. Android &Swift iOS开发:语言与框架对比

    转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...

  2. 初步swift该研究指出语言(基本数据类型)

    笔者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/28258805 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  3. java,swift,oc互相转换,html5 web开发跨平台

    java,swift,oc互相转换,html5 web开发跨平台 写一个java->swift的程序,这个程序是做跨平台系统的核心部分swift和oc到java也在考虑之列Swift->J ...

  4. ProjectTool写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift、Objecive-C双语言

    这是自动写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 [ 官网下载 ] 这是一个白包目录示例 ProjectToo ...

  5. Android与Swift iOS开发:语言与框架对比

    Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...

  6. Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法

    由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...

  7. Swift & OC 混编 浅析

    转载自:http://www.infoq.com/cn/articles/wangyi-cartoon-swift-mixed-practice?utm_campaign=rightbar_v2&am ...

  8. cocoapod Podfile use frameworks swift/oc混编 could not build module xxx

    前置: 知名的pod: AFNetworking 我自己的pod:  AFNetworking+RX  3.1.0.18 里面有一段代码是: #import <Foundation/Founda ...

  9. swift OC混编工程,xcode断点调试,控制台左侧只有变量名称不显示值,右侧输入po命令,打印除一堆提示

    断点调试 (lldb) po 变量名warning: Swift error in module 项目名.Debug info from this module will be unavailable ...

随机推荐

  1. 修改mysql表结构,添加一个主键索引自增字段,修改原来的主字段为普通字段

    原来有一个字段id,为自增,主键,索引.现在要新增一个字段s_id为自增,主键,索引.同时把原来的主字段改成普通字段,默认值为0. Alter table e_diamond_jhds change ...

  2. SQL SA密码丢失

    ------------记不清了,以下似乎是这样操作的-----NET STOP MSSQLSERVER Net Start MSSQLServer /m"SQLCMD" 安装并使 ...

  3. selenium操作浏览器cookie方法

    /**     * 操作浏览器的cookie     */        @Test    public void testCookie()throws Exception{        drive ...

  4. filebeat安装与基础用法

    来自官网,版本为1.2 下载rpm包并安装 wget -c https://download.elastic.co/beats/filebeat/filebeat-1.2.3-x86_64.rpm r ...

  5. Windows 域(domain)

    http://baike.baidu.com/view/1512519.htm http://baike.baidu.com/view/1218493.htm http://www.jb51.net/ ...

  6. servlet学习笔记_1

    一.动态页面和静态页面 动态页面&静态页面:如果浏览器在不同时刻不同条件下访问web服务器的某个页面,浏览器所获得的页面内容会发生变化,那么这种页面称之为动态页面.动态页面和静态页面的区别在于 ...

  7. centos apache源码安装过程记录

    1.下载相关源文件 wget http://mirror.bjtu.edu.cn/apache/httpd/httpd-2.4.18.tar.gzwget http://mirrors.hust.ed ...

  8. 两种PHP生成二维码的方法

    PHP生成二维码,个人认为最常用的有两种,1.使用google的api生成,2.使用PHP QR Code生成,两种方法生成的二维码都是很清淅的,效果不错.下面来分别说明这两种方法如何实现. 一.PH ...

  9. HTML 图像<img>

    定义和用法: img元素向网页中嵌入一副图像. 请注意:从技术上讲,<img>标签并不会在网页中插入图像,而是从网页上链接图像.<img>标签创建的是被引用图像的占位空间. 属 ...

  10. jQuery经典面试题及答案精选(转)

    jQuery是一款非常流行的Javascript框架,如果你想要从事Web前端开发这个岗位,那么jQuery是你必须掌握而且能够熟练应用的一门技术.本文整理了一些关于jQuery的经典面试题及答案,分 ...