代码

//
// 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. vROPS中获取虚拟机在VC中的UUID

    vROPS中虚拟机对象的ID为resourceID,跟vCenter中虚拟机的UUID是不一致的,因此想要将vROPS中的虚拟机和vCenter中的虚拟机对应肯定不能靠虚拟机名称,而是一定要靠UUID ...

  2. Understanding and Creating OWIN Middlewares - Part 1

    In my previous article, What is OWIN? A Beginners Guide we learned the basics of OWIN and the benefi ...

  3. Nodejs V8引擎 fast property lookup

    前言 之所以会研究这个东西,是我在网上找了一下各个语言的执行效率比较.好吧,我承认这是个无聊的东西,不过看看总是无妨,然而我惊讶的发现,有些测试声称Java,C,Nodejs是处在同一个效率级别参见链 ...

  4. GDPR或使全球域名whois信息被隐藏

    什么是GDPR? GDPR 全称为 General Data Protection Regulation,是欧盟 2016 年 4 月通过的一项通用数据保护条例(或称“一般数据保护法案”),是 199 ...

  5. C# Winform实现手机号码归属地查询工具

    摘要:本文介绍使用C#开发基于Winform的手机号码归属地查询工具,并提供详细的示例代码供参考. 一.需求描述 输入正确的手机号码,查询该号码的归属地和其他相关信息. 二.需求分析 1.实现手机号码 ...

  6. 淘海外分发Job 多线程demo

    using System;using System.Collections.Generic;using System.Configuration;using System.Diagnostics;us ...

  7. S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则

    注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html      < ...

  8. 设计模式--解释器模式C++实现

    1定义 给定一门语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子 2类图 角色分析 AbstractExpression抽象解释器,具体的解释任务由各个实现类完成, ...

  9. Java多态性的理解2

    多态的基础理解请参考:http://www.cnblogs.com/liujinhong/p/6003144.html Java的多态一直是我们理解的一个难点.在读过<深入理解Java虚拟机&g ...

  10. LabVIEW之生产者/消费者模式--队列操作

    LabVIEW之生产者/消费者模式--队列操作 彭会锋 本文章主要是对学习LabVIEW之生产者/消费者模式的学习笔记,其中涉及到同步控制技术-队列.事件.状态机.生产者-消费者模式,这几种技术在在本 ...