斯坦福大学iOS应用开发教程学习笔记(第二课) 计算器实现2 改进版
来源:互联网 发布:2013年旅游数据统计 编辑:程序博客网 时间:2024/06/04 18:10
主要内容同:http://blog.csdn.net/u012605629/article/details/48056593,有部分改进,
更改了Calculator部分实现 使用一个递归栈实现。
整个项目下载:https://github.com/junxianhu/Calculator-v2,觉得有帮助的可以点击Star啊,谢谢啦。
贴几个变化的代码:
CalculatorBrain.h
//// CalculatorBrain.h// Calculator//// Created by cipher on 15/8/27.// Copyright (c) 2015年 com.lab1411.cipher. All rights reserved.//#import <Foundation/Foundation.h>@interface CalculatorBrain : NSObject-(void)pushOperation:(double) operand;-(double)performOperation:(NSString *)operation;@property (readonly)id program;+ (double)runProgram:(id)program;+ (NSString *)descriptionOfProgram:(id)program;@end
CalculatorBrain.m
//// CalculatorBrain.m// Calculator//// Created by cipher on 15/8/27.// Copyright (c) 2015年 com.lab1411.cipher. All rights reserved.//#import "CalculatorBrain.h"//private@interface CalculatorBrain()//初始化为nil或0@property(nonatomic,strong) NSMutableArray *programStack;@end@implementation CalculatorBrain@synthesize programStack = _programStack;//只有一个变量指针 不分配内存空间//warning//这里很重要 刚开始没有更改为programStack,则一直没有初始化//导致后面的数据 一直加入不到栈中-(NSMutableArray *)programStack{ //延迟实例化 if(_programStack == nil){ _programStack = [[NSMutableArray alloc] init]; } return _programStack;}-(void)setOperandStack:(NSMutableArray *)operandStack{ _programStack = operandStack;}//入操作数-(void)pushOperation:(double) operand{ //add只能加入对象 [self.programStack addObject:[NSNumber numberWithDouble:operand]];}-(id)program{ return [self.programStack copy];}+(NSString *)descriptionOfProgram:(id)program{ return @"implement this in Assignment 2";}+(double)popOperandOfStack:(NSMutableArray *)stack{ double result = 0; id topOfStack = [stack lastObject]; if (topOfStack) { [stack removeLastObject]; } if ([topOfStack isKindOfClass:[NSNumber class]]) { result = [topOfStack doubleValue]; }else if([topOfStack isKindOfClass:[NSString class]]){ NSString *operation = topOfStack; if ([operation isEqualToString:@"+"]) { result =[self popOperandOfStack:stack] + [self popOperandOfStack:stack]; }else if ([operation isEqualToString:@"/"]){ double tmp2 = [self popOperandOfStack:stack]; double tmp1 = [self popOperandOfStack:stack]; if (tmp2 != 0) { result = tmp1 / tmp2; } }else if([operation isEqualToString:@"*"]){ result = [self popOperandOfStack:stack] * [self popOperandOfStack:stack]; }else if([operation isEqualToString:@"-"]){ double tmp2 = [self popOperandOfStack:stack]; double tmp1 = [self popOperandOfStack:stack]; result = tmp1 - tmp2; } } return result;}+(double)runProgram:(id)program{ NSMutableArray *stack; if ([program isKindOfClass:[NSArray class]]) { stack = [program mutableCopy]; } return [self popOperandOfStack:stack];}-(double)performOperation:(NSString *)operation{ [self.programStack addObject:operation]; return [CalculatorBrain runProgram:self.program];}@end其他文件不变。
0 0
- 斯坦福大学iOS应用开发教程学习笔记(第二课) 计算器实现2 改进版
- 斯坦福大学iOS应用开发教程学习笔记(第二课) 计算器实现(mvc实战)
- 2011斯坦福大学iOS应用开发教程学习笔记(第二课)My First iOS App
- 2011斯坦福大学iOS应用开发教程学习笔记(第二课)My First iOS App
- 2011斯坦福大学iOS应用开发教程学习笔记(第二课)My First iOS App
- 斯坦福大学iOS应用开发教程学习笔记(第二课)My First iOS App
- 斯坦福大学iOS应用开发教程学习笔记
- 斯坦福大学iOS应用开发教程学习笔记
- 斯坦福大学iOS应用开发教程学习笔记
- 2011斯坦福大学iOS应用开发教程学习笔记(第六课)故事版
- 2011斯坦福大学iOS应用开发教程学习笔记(第六课)故事版
- 2011斯坦福大学iOS应用开发教程学习笔记(第六课)故事版
- 斯坦福大学iOS应用开发教程学习笔记(第六课)故事版 StoryBoard
- 2011斯坦福大学iOS应用开发教程学习笔记(第六课)故事版
- IOS学习之斯坦福大学IOS开发课程笔记(第二课)
- IOS学习之斯坦福大学IOS开发课程笔记(第二课)
- 2011年冬斯坦福大学公开课 iOS应用开发教程学习笔记(第四课) Views 视图
- 2011年冬斯坦福大学公开课 iOS应用开发教程学习笔记(第四课) Views 视图
- UILabel根据内容自动调整高度
- 文章标题
- 阿里云监控用户手册
- 安装和配置jenkins
- 微信公众帐号开发教程第17篇-应用实例之智能翻译
- 斯坦福大学iOS应用开发教程学习笔记(第二课) 计算器实现2 改进版
- weblogic的集群与配置
- How to use Hibernate annotations @ManyToOne and @OneToMany for associations
- Centos7 安装kilo-1 总览
- Mantis缺陷管理流程权限定制
- spring mvc表单form值自动传到javabean-注解@ModelAttribute
- 3DsMax 创建阴影贴图的技术指南
- HDU 3567 Eight II (A*)
- 该不该写技术博客