Objective C - 3 - 实现一个计算器
代码
//
// 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 - 实现一个计算器的更多相关文章
- 程序员修仙之路- CXO让我做一个计算器!!
菜菜呀,个税最近改革了,我得重新计算你的工资呀,我需要个计算器,你开发一个吧 CEO,CTO,CFO于一身的CXO X总,咱不会买一个吗? 菜菜 那不得花钱吗,一块钱也是钱呀··这个计算器支持加减乘除 ...
- 用Qt实现一个计算器
一· 介绍 目的: 做一个标准型的计算器.用于学习Qt基础学习. 平台: Qt 5.12.0 二· 结构框架设计 2.1最终产品样式 界面的设计大体按照win系统自带的计算器做模仿.左边是win7 的 ...
- 用VBA写一个计算器
着急的 玩家 可以 跳过“============”部分 ======================================可以跳过的 部分 开始==================== ...
- Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。
返回本章节 返回作业目录 需求说明: 定义一个计算器类, 实现计算器类中加. 减. 乘. 除的运算方法, 每个方法能够接收2个参数. 实现思路: 定义计算器类. 定义计算器类中加.减.乘.除的方法. ...
- C#编写一个计算器
编写一个计算器,练习在窗体上添加控件.调整控件的布局,设置或修改控件属性,编写事件处理程序的方法. 代码: using System; using System.Collections.Generic ...
- 利用QT制作我们自己的一个计算器
有了前面的经验就比较容易创建一个 属于我们自己的计算器了. 一些简单的拖拽就可以实现了. 界面设计部分: 转到槽之后的代码部分: #include "widget.h" #incl ...
- 1.自己写一个计算器demo
知识点: 1.System.Math.Pow() 实现乘方 2.实现计算器的运算优先级,依次调用的流程 问题: 还未实现“()”功能 解决方案 UI:
- 一个计算器的C语言实现
今天在读<编译原理及实践>时.看到了一个简单的整数计算器的实现. 依照书上的思路,我略微进行了扩展: 1.从整数计算器扩展到小数计算器. 2.支持除法 3.支持空字符. 执行效果例如以下: ...
- 如何用Python写一个计算器软件 附带效果图
该计算器使用Python tkinter模块开发 效果如下图 import tkinter #导入tkinter模块 root = tkinter.Tk() root.minsize(280,500 ...
随机推荐
- Mybatis 一对多 简单映射配置
只需在一对多的 “一” Model中定义一个list集合: public class SelectQuestion{ // 主键ID private Integer id; private Strin ...
- RedHat5.4 使用 centOS5源更新
1.卸载HedHat5.4的yum命令 先查看RedHat上是否安装yum 删除所有的yum软件 rpm -qa | grep yum | xargs rpm - ...
- PyTorch源码解读之torchvision.models(转)
原文地址:https://blog.csdn.net/u014380165/article/details/79119664 PyTorch框架中有一个非常重要且好用的包:torchvision,该包 ...
- CALL_AND_RETRY_LAST Allocation failed node打包报错
全局安装increase-memory-limit: npm install -g increase-memory-limit 进入工程目录,执行: increase-memory-limit
- SPSS 分布类型的检验
假设检验的标准步骤: 1.建立假设:根据问题的需要提出原假设H0,以及其对立面备择假设H1. 2.确立检验水准:即设立小概率事件的界值α. 3.进行试验:得到用于统计分析的样本,以该试验的结果作为假设 ...
- Kubernetes容器运行时(CRI)简介
Kubernetes节点的底层由一个叫做“容器运行时”的软件进行支撑,它负责比如启停容器这样的事情.最广为人知的容器运行时当属Docker,但它不是唯一的.事实上,容器运行时这个领域发展迅速.为了使K ...
- ng-options 如何实现其中一项option禁选
<select class="form-control" ng-model="functionPaymentMethod" ng-options=&quo ...
- winform如何让窗体不显示Icon但在任务栏中显示Icon
protected override void OnShown(EventArgs e) { base.OnShown(e); const int WM_SETICON = 0x80; Bitmap ...
- transform对定位元素的影响
1.温故知新 absolute:生成绝对定位的元素,相对于除position:static 定位以外的第一个有定位属性的父元素进行定位,若父元素没有定位属性则相对于浏览器窗口的左上角定位,定位的元素不 ...
- 搭建etcd集群
一 介绍 etcd 高可用一致性键值存储系统,使用Raft一直算法处理日志复制以保证数据一致性.主要在搭建kubernates时关注到etcd来研究部署etcd.使用golang语言编写,和zooke ...