代码

//
// CalculatorViewController.m
// Calculator
//
// Created by sskset on 5/28/14.
// Copyright (c) 2014 shanke. All rights reserved.
// #import "CalculatorViewController.h" @interface CalculatorViewController ()
@property (weak, nonatomic) IBOutlet UITextField *resultText;
@property (nonatomic) BOOL isProcessing;
@property (nonatomic) NSMutableArray *numberStack;
@property (nonatomic) NSMutableArray *operandStack;
@end @implementation CalculatorViewController -(NSMutableArray *)operandStack
{
if(!_operandStack)
_operandStack = [[NSMutableArray alloc] init];
return _operandStack;
} -(NSMutableArray *)numberStack
{
if(!_numberStack)
_numberStack = [[NSMutableArray alloc] init]; return _numberStack;
} - (IBAction)operandPressed:(UIButton *)sender { if([self isAvailableToCalculate])
{
[self doCalculate];
}
else
{
[self.numberStack addObject:self.resultText.text];
} [self.operandStack addObject:sender.titleLabel.text];
self.isProcessing = NO;
} - (IBAction)numberPressed:(UIButton *)sender { if (self.isProcessing) {
self.resultText.text =
[self.resultText.text stringByAppendingString:sender.titleLabel.text];
}
else{
self.resultText.text = sender.titleLabel.text;
self.isProcessing = YES;
}
} - (IBAction)resetPressed:(id)sender { self.isProcessing = NO; [self.numberStack removeAllObjects];
[self.operandStack removeAllObjects]; self.resultText.text = @"0";
} -(void)doCalculate
{
NSString *operand = [self.operandStack lastObject]; if(operand)
{
NSString *outObject = [self.numberStack lastObject];
int outputInteger = outObject ? [outObject intValue] : 0;
[self.numberStack removeLastObject]; int resultInteger = 0; if ([operand isEqualToString:@"+"])
{
resultInteger = [self.resultText.text intValue] + outputInteger;
}
else if ([operand isEqualToString:@"-"])
{
resultInteger = outputInteger - [self.resultText.text intValue];
}
else if ([operand isEqualToString:@"*"])
{
resultInteger = outputInteger * [self.resultText.text intValue];
}
else
{
resultInteger = [self.resultText.text intValue] == 0 ? 0 : outputInteger / [self.resultText.text intValue];
} [self.operandStack removeLastObject]; NSString *resultString = [NSString stringWithFormat:@"%d", resultInteger];
self.resultText.text = resultString;
[self.numberStack addObject:resultString];
}
} -(BOOL)isAvailableToCalculate
{
return [self.operandStack lastObject] != nil;
} - (IBAction)enterPressed:(id)sender
{
[self doCalculate];
} @end

界面

Objective C - 3 - 实现一个计算器的更多相关文章

  1. 程序员修仙之路- CXO让我做一个计算器!!

    菜菜呀,个税最近改革了,我得重新计算你的工资呀,我需要个计算器,你开发一个吧 CEO,CTO,CFO于一身的CXO X总,咱不会买一个吗? 菜菜 那不得花钱吗,一块钱也是钱呀··这个计算器支持加减乘除 ...

  2. 用Qt实现一个计算器

    一· 介绍 目的: 做一个标准型的计算器.用于学习Qt基础学习. 平台: Qt 5.12.0 二· 结构框架设计 2.1最终产品样式 界面的设计大体按照win系统自带的计算器做模仿.左边是win7 的 ...

  3. 用VBA写一个计算器

    着急的 玩家 可以 跳过“============”部分 ======================================可以跳过的 部分   开始==================== ...

  4. Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。

    返回本章节 返回作业目录 需求说明: 定义一个计算器类, 实现计算器类中加. 减. 乘. 除的运算方法, 每个方法能够接收2个参数. 实现思路: 定义计算器类. 定义计算器类中加.减.乘.除的方法. ...

  5. C#编写一个计算器

    编写一个计算器,练习在窗体上添加控件.调整控件的布局,设置或修改控件属性,编写事件处理程序的方法. 代码: using System; using System.Collections.Generic ...

  6. 利用QT制作我们自己的一个计算器

    有了前面的经验就比较容易创建一个 属于我们自己的计算器了. 一些简单的拖拽就可以实现了. 界面设计部分: 转到槽之后的代码部分: #include "widget.h" #incl ...

  7. 1.自己写一个计算器demo

    知识点: 1.System.Math.Pow() 实现乘方 2.实现计算器的运算优先级,依次调用的流程 问题: 还未实现“()”功能 解决方案 UI:

  8. 一个计算器的C语言实现

    今天在读<编译原理及实践>时.看到了一个简单的整数计算器的实现. 依照书上的思路,我略微进行了扩展: 1.从整数计算器扩展到小数计算器. 2.支持除法 3.支持空字符. 执行效果例如以下: ...

  9. 如何用Python写一个计算器软件 附带效果图

    该计算器使用Python  tkinter模块开发 效果如下图 import tkinter #导入tkinter模块 root = tkinter.Tk() root.minsize(280,500 ...

随机推荐

  1. ubuntu系统samba服务的安装配置

    安装 sudo apt-get install samba 配置 打开Samba配置文件: sudo gedit /etc/samba/smb.conf 在其最后添加: [share] path = ...

  2. 生信实验室收集---Dana Pe'er Lab

    Dana Pe'er Lab of Computational Systems Biology Dana Pe'er是哥伦比亚大学生物科学系的副教授,被认为是计算系统生物学的主要研究人员之一.Dana ...

  3. LeetCode——Increasing Triplet Subsequence

    Question Given an unsorted array return whether an increasing subsequence of length 3 exists or not ...

  4. LeetCode——Nth Digit

    Question Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... ...

  5. Sublime Text指南

    转自: http://lucida.me/blog/sublime-text-complete-guide/  摘要(Abstract) 本文系统全面的介绍了Sublime Text,旨在成为最优秀的 ...

  6. XML CDATA是什么?

    XML CDATA是什么? 投稿:mdxy-dxy 字体:[增加 减小] 类型:转载   这篇文章主要为大家介绍下XML CDATA是什么,学习xml的朋友可以参考下     All text in ...

  7. LA 5135 井下矿工(点—双连通分量模板题)

    https://vjudge.net/problem/UVALive-5135 题意:在一个无向图上选择尽量少的点涂黑,使得任意删除一个点后,每个连通分量至少有一个黑点. 思路: 首先dfs遍历求出割 ...

  8. Java程序员怎么迈向架构师

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题. ...

  9. 什么是JSON?

    JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串字符串 只不过元素会使用特定的符号标注. {} 双 ...

  10. 负载均衡,会话保持,session同步

    一,什么负载均衡 一个新网站是不要做负载均衡的,因为访问量不大,流量也不大,所以没有必要搞这些东西.但是随着网站访问量和流量的快速增长,单台服务器受自身硬件条件的限制,很难承受这么大的访问量.在这种情 ...