开发经验之状态机思想,分别使用了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 来在特定情况下改变当前状态
开发经验之状态机思想,分别使用了swift,OC,C,PHP语言实现的更多相关文章
- Android &Swift iOS开发:语言与框架对比
转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...
- 初步swift该研究指出语言(基本数据类型)
笔者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/28258805 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- java,swift,oc互相转换,html5 web开发跨平台
java,swift,oc互相转换,html5 web开发跨平台 写一个java->swift的程序,这个程序是做跨平台系统的核心部分swift和oc到java也在考虑之列Swift->J ...
- ProjectTool写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift、Objecive-C双语言
这是自动写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 [ 官网下载 ] 这是一个白包目录示例 ProjectToo ...
- Android与Swift iOS开发:语言与框架对比
Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...
- Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法
由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...
- Swift & OC 混编 浅析
转载自:http://www.infoq.com/cn/articles/wangyi-cartoon-swift-mixed-practice?utm_campaign=rightbar_v2&am ...
- cocoapod Podfile use frameworks swift/oc混编 could not build module xxx
前置: 知名的pod: AFNetworking 我自己的pod: AFNetworking+RX 3.1.0.18 里面有一段代码是: #import <Foundation/Founda ...
- swift OC混编工程,xcode断点调试,控制台左侧只有变量名称不显示值,右侧输入po命令,打印除一堆提示
断点调试 (lldb) po 变量名warning: Swift error in module 项目名.Debug info from this module will be unavailable ...
随机推荐
- 2015弱校联盟(1) - I. Travel
I. Travel Time Limit: 3000ms Memory Limit: 65536KB The country frog lives in has n towns which are c ...
- web前段 弹出小例子
<html> <head> <meta charset="utf-8"> <meta name="viewport" ...
- 连接mysql提示com.mchange.v2.resourcepool.BasicResourcePool
1.com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@6ff9129c com.mchange.v2.resourc ...
- 《BI那点儿事》三国人物智力分布状态分析
献给广大的三国爱好者们,希望喜欢三国的朋友一起讨论,加深对传奇三国时代的了解数据分析基础概念:数据分为“不可测量”的数据和“可测量”的数据.不可测量的数据称为“分类数据”(Category Data或 ...
- const char* && string && String^ 类型转换
const char* && string && String^ 类型转换 const char* ---> string const char * cw= &q ...
- css+div打造三角形(箭头)
在很多网站都见过这样的箭头,之前我一直以为是图片,直到今天才知道原来可以用css做.开始看代码没太看懂,后来自己试了几遍才恍然大悟.贴出来分享下.(大神请直接忽略) 先看代码: HTML部分就是一个单 ...
- CSS 3 颜色表示法
1,Color Name:red 优点:方便记忆 缺点:数量少不支持透明度 2,HEX方式:#FFFFFF 优点:颜色种类多 缺点:换算复杂需要借助工具 3,RGB方式:rgb(25 ...
- Android权限声明
1.网络 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/ > < ...
- 0517 Scrum 项目4.0
Sprint 1看板: 任务认领(一种标签颜色代表一个人的任务): 许佳仪:紫色 柯晓君:红色 赖文亮:蓝色 卓宇靖:黑色 每日例会的时间:16:00 地点:课室 成员 团队贡献分 许佳仪 1 ...
- hdu----1686 Oulipo (ac自动机)
Oulipo Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...