代码

//
// 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. 解读:Hadoop序列化类

    序列化(serialization)是指将结构化的对象转化字节流,以便在进程间通信或写入硬盘永久存储. 反序列化(deserialization)是指将字节流转回到结构化对象的过程. 需要注意的是,能 ...

  2. MySQL 常用运算符

    1.算数运算符 加 mysql> select 1+2; 减 mysql> select 2-1; 乘 mysql> select 2*3; 除 mysql> select 5 ...

  3. Mac OS build caffe2 Error:This file was generated by an older version of protoc which is

    问题所在 我们可以发现这个错误跟protobuf的版本有关,因此我们可以执行script/diagnose_protobuf.py 我们可以看到,pip install protobuf 和 brew ...

  4. .Net Core Cookie跨站点共享 会话保持

    这里使用简单粗暴的方式,只为做个记录. 关键配置: services.AddDataProtection() .SetApplicationName("appname") .Dis ...

  5. 07_ZkClient提供的API使用

    1. ZkClient API简介 zkclient是Github上一个开源的ZooKeeper客户端,在原生ZooKeeper API接口上进行包装,同时在内部实现了session超时重连,Watc ...

  6. Generator 函数的异步应用

    异步编程对 JavaScript 语言太重要.Javascript 语言的执行环境是“单线程”的,如果没有异步编程,根本没法用,非卡死不可.本章主要介绍 Generator 函数如何完成异步操作. 传 ...

  7. MVVM架构简单使用

    版权声明:本文为博主原创文章,未经博主授权不得转载. 项目github地址 https://github.com/zhangjiahuan8888/mvvmDemo/tree/master 开篇 MV ...

  8. PHP运算符-算术运算符、三元运算符、逻辑运算符

    运算符是用来对变量.常量或数据进行计算的符号,它对一个值或一组值执行一个指定的操作.PHP的运算符包括算术运算符.字符串运算符.赋值运算符.位运算符.逻辑运算符.比较运算符.递增或递减运算符.错误控制 ...

  9. HttpConnection的使用

    项目中需要与第三方系统交互,而交互的方式是XML报文形式,所以会用到HttpConnection与第三方系统连接交互,使用起来并不复杂,但是有几点需要注意的: 1.乱码的问题解决 2.超时的设置,注意 ...

  10. 1-15-2-RAID5 企业级RAID磁盘阵列的搭建(RAID1、RAID5、RAID10)

    RAID5的搭建 第一步:添加四个磁盘,开机并检查(略过) 第二步:使用fdisk命令分别对四个磁盘进行分区,效果如下图: 第三步:使用mdadm命令创建RAID5磁盘阵列 [root@localho ...