斯坦福大学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
原创粉丝点击