iOS小程序-混合计算器

1、实现功能:输入想要计算的表达式  例如3+2*2-9/3*2,计算器不会输入一点就算一点,而是在你输入=号的时候,根据运算符的优先级进行运算

2、思路:a、首先由于Lable上显示的都是字符串,那么我们输入的这一串表达式也最好以字符串的形式保存起来

      b、所以我们可以定义两个数组numMutableArray和operationMutableArray,一个用来存放数字,一个用来存放运算符。例如上面那个表达式,numMutableArray里面就存放[3,2,2,9,3,2],operationMutableArray里面就存放[+,*,-,/,*],而且它们的索引值是对应的

      c、接下来我们就可以遍历operationMutableArray这个数组,当出现* 或者/运算符的时候就把索引值i和i+1在numMutableArray里面对应值做相应的就算,这样第一遍便利结束,我们就可以把乘除运算完了,第二遍就来解决加法和减法

      d、接下来就是注意一些小细节,比如两个数运算完之后,我们需要将得到的这个数放在原来索引值为i的位置上,所以需要替换,那i+1位置上的数我们就需要删除,包括i对应的那个运算符也要删除

3、开始实现

a、首先打开Xcode,创建一个SingleViewApplication工程

得到如图的界面

b、在左侧的storyboard里面我们可以看到一个iphone的模拟样式,点击模拟样式的最上边,然后在最右侧的选项里去掉这两个选项

c、我们可以使用最右侧下方的工具栏里的label和button工具为计算器添加框架,如图

  添加显示文字的UILabel

     .可以自由拖动,调整视图在界面上的大小

    .改变alignment属性 设置居右对齐

    .设置font属性 改变文字的显示大小

    .background 设置背景颜色

    .text 设置显示的文字

  button一样的设置

d、接下来点击Xcode右上方的按键

得到与这个storyboard相对应的ViewController.m,在模拟样式里将鼠标放在按键上,按住ctrl键拖动,可以得到点击这个按钮的方法如图

然后将功能相同的数字键全部添加到这个方法上,你可以看到方法左侧有一个小加号,拖动加号到数字键上,就可以完成连接了,用相同的方法将操作键 + - * /完成,还有一个=号和清零键,对了还要把上方的label拖到代码里,定义一个属性变量,如图

e、拖拽工作全部完成后,我们开始进入代码阶段,具体实现的代码如下:

#import "ViewController.h"

//定义一个记录当前是输入数字还是操作键的枚举

typedef enum{

kStatusNum,

kStatusOperation,

kStatusDone

}kStatus;

//定义一个判断当前操作是加减操作还是乘除操作的枚举

typedef enum {

kComputetypePrimary,

kComputetypeSenior

}kComputetype;

//定义一个当前操作是什么的枚举

typedef enum{

kOperationTypeAdd = 1,

kOperationTypeMinus,

kOperationTypeMultiple,

kOperationTypeDevide

}kOperationType;

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UILabel *resultLable;

@property (nonatomic, assign) kStatus status;

@property (nonatomic, strong) NSMutableArray *numMutableArray;//存放输入的每个数字

@property (nonatomic, strong) NSMutableArray *operationMutableArray;//存放输入的每个运算符

@property (nonatomic, strong) NSDictionary *operationDic;//定义个字典

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.status = kStatusNum;

//初始化数组

self.numMutableArray = [NSMutableArray array];

self.operationMutableArray = [NSMutableArray array];

//初始化字典

self.operationDic = @{@"+":@1, @"-":@2, @"*":@3, @"/":@4};

}

//按下数字键

- (IBAction)numButtonDidClicked:(UIButton *)sender {

//获取按钮上面的数字

int num = [sender.titleLabel.text intValue];

long long showNum;

//判断是否是一个新的数字的开始

if (self.status == kStatusNum) {

//不是一个新的数字的开始

//计算(拼接)输入的数字

showNum = [self.resultLable.text longLongValue] * 10 + num;

}else{

//判断之前是否有结果  如果有结果  我们将丢弃这个结果

if (self.status == kStatusDone) {

[self.numMutableArray removeAllObjects];

}

//这是一个新的数字的开始

showNum = num;

self.status = kStatusNum;

}

//显示在label上

self.resultLable.text = [NSString stringWithFormat:@"%lld",showNum];

}

- (IBAction)operationButtonDidClicked:(UIButton *)sender {

//判断是不是重复按下操作键了

if (self.status != kStatusOperation) {

//1.上一个不是按下操作键

//改变当前的状态  通知上面的方法 开始输入新的数字了

self.status = kStatusOperation;

//这个数字结束了  将这个数字保存到数组里面

[self.numMutableArray addObject:self.resultLable.text];

//保存当前点击按钮上的title

[self.operationMutableArray addObject:sender.titleLabel.text];

}else{

//2.重复按下操作键

//用新的操作键代替原来那个

//获取数组的最后一个索引值

NSInteger lastIndex = self.operationMutableArray.count - 1;

//替换

[self.operationMutableArray replaceObjectAtIndex:lastIndex withObject:sender.titleLabel.text];

}

}

//等号被按下

- (IBAction)calculate:(UIButton *)sender {

//添加当前最后一个数字

[self.numMutableArray addObject:self.resultLable.text];

//开始计算

[self computeWithtype:kComputetypeSenior];

[self computeWithtype:kComputetypePrimary];

//将结果显示到界面上

self.resultLable.text = [self.numMutableArray firstObject];

self.status = kStatusDone;

[self.numMutableArray removeAllObjects];

}

- (void)computeWithtype:(kComputetype)type{

NSString *firstOperation;

NSString *secondOperation;

if (type == kComputetypePrimary) {

firstOperation = @"+";

secondOperation = @"-";

}else{

firstOperation = @"*";

secondOperation = @"/";

}

//开始计算

for (int i = 0; i< self.operationMutableArray.count; i++) {

//获取i对应的运算符

NSString *opr = [self.operationMutableArray objectAtIndex:i];

//判断是什么运算符

if ([opr isEqualToString:firstOperation]||[opr isEqualToString:secondOperation]) {

//获取即将进行运算的两个数

long long firstNum = [[self.numMutableArray objectAtIndex:i] longLongValue];

long long secondNum = [[self.numMutableArray objectAtIndex:i+ 1 ]longLongValue];

long long result = [self compute:firstNum second:secondNum operation:opr];

//覆盖i对应的值

[self.numMutableArray replaceObjectAtIndex:i withObject:[NSString stringWithFormat:@"%lld",result]];

//删除后面的一个数

[self.numMutableArray removeObjectAtIndex:i+1];

//删除i对应的那个运算符

[self.operationMutableArray removeObjectAtIndex:i];

//将i减1  因为删除了后面的一个数

i--;

}

}

}

//计算结果

- (long long)compute:(long long)firstNum second:(long long)secondNum operation:(NSString *)operation{

//从字典里面获取这个字符串的运算符对应的枚举值

kOperationType type = (kOperationType)[[self.operationDic objectForKey:operation] longLongValue];

long long result;

switch (type) {

case kOperationTypeAdd:

result = firstNum + secondNum;

break;

case kOperationTypeMinus:

result = firstNum - secondNum;

break;

case kOperationTypeMultiple:

result = firstNum * secondNum;

break;

case kOperationTypeDevide:

result = firstNum / secondNum;

break;

default:

break;

}

return result;

}

//清空

- (IBAction)clearButtonDidClicked:(UIButton *)sender {

self.resultLable.text = @"0";

[self.numMutableArray removeAllObjects];

[self.operationMutableArray removeAllObjects];

self.status = kStatusNum;

}

- (IBAction)isPlusButtonDidClicked:(UIButton *)sender {

long long num = [self.resultLable.text longLongValue];

long long num2 = -(num);

self.resultLable.text = [NSString stringWithFormat:@"%lld",num2];

}

@end

最后,这个计算器还不是太好,小数点的功能还没有实现,也就是说无法完成某些除法,小数的运算,本人也是新手,欢迎讨论,不喜勿喷!

时间: 2024-10-20 19:35:58

iOS小程序-混合计算器的相关文章

Hybrid小程序混合开发之路 - 数据交互

HTML+CSS是历史悠久.超高自由度.控制精准.表现能力极强.编码简单.学习门槛超低.真跨平台的一种UI界面开发方式. 本文介绍的是微信小程序和H5混合开发的一种数据交互方式. 很多应用在原生界面中混杂着HTML界面 记得xp时代的QQ,有些界面偶尔会弹出熟悉的js错误对话框,还能右键弹出熟悉的IE6的右键菜单,伪装的挺好,差点没认出来,现在的QQ就不知道了. 美团.淘宝这些拥有几乎无限界面的手机App,顶部进度条一亮,这是一个H5 没谁了! Electron!好嗨哟~ 数据交互 使用了HTM

第一个小程序-简单计算器

虽然这是一个比较简单的小程序,但是在看过一遍视频之后还是感觉无从下手.只要原因是没有思路,准确说是缺乏对程序的一个整体的构思. 先来说一下编写简单计算器代码的构思: 建立index.php文件-> 编写html基本结构:head.title.body-> 使用表单table结构提交数据给php进行运算-> 定义form,声明提交方式:<form action="index.php" method="post">-> php通过$_

开发第一个IOS小程序 - 点击按钮文字变色

1. 题目:实现点击按钮切换文字对应的颜色 2.分析大致的开发步骤是 •添加所需要的UI元素:3个按钮(UIButton).1个文本标签(UILabel) •监听3个按钮的点击事件 •改变文本标签的文字颜色 3.具体实现步骤 3.1 在storyboard文件中,拖拽相应控件器上,布局好以上显示页面效果 3.2 然后利用Xcode右端上的“圆圈”按钮,将代码区分割成 “Main.storyboard”与“viewController.m”文件,两个可以按住control键,不要放开,将以上元素拖

【小程序】计算器(使用正则表达式实现)

功能: 实现加减乘除及拓号优先级解析 用户输入 1-2*((60-30+(-40/5)*(9-2*5/3-2*(-18.3/3-(5*2+3+(-2*3)*(-7-1)/(5*7)*2)+2/6*7)+(-6+5+1)-7/3*99/4*(-2998)/3+10*568/14))-(-4*3)/(16-3*2))+(2+3*2)+(2-3) 类似公式后,通过正则表达式解析里面的(),+,-,*,/符号和公式,运算后得出结果 # Author:q1.ang import re content=in

微信小程序开发(2) 计算器

在这篇微信小程序开发教程中,我们将介绍如何使用微信小程序开发计算器功能. 本文主要分为两个部分,小程序主体部分及计算器业务页面部分 一.小程序主体部分 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 1. 小程序逻辑 App({ onLaunch: function() { // Do something initial when launch. }, onShow: function() { // Do something when show. }, onHide: funct

微信小程序源码下载(200多个)

微信小程序源码下载汇总,点击标题进入对应的微信小程序下载页面. 最新 demo源码(点击标题进入帖子下载) 描述 1 微信小程序 会议室预定小程序 微信小程序 会议室预定小程序**** 本内容被作者隐藏 **** 2 微信小程序-双人五子棋小游戏 微信小程序-双人五子棋小游戏**** 本内容被作者隐藏 **** 3 打卡签到小程序 用微信小程序实现的一个简单的打卡签到的小程序拒绝 4 微信小程序---左滑删除 微信小程序---左滑删除**** 本内容被作者隐藏 **** 5 一个借钱的记事本的微

微信小程序-整理各种小程序源码和资料免费下载

微信小程序整理下载 [小程序源码]微信小程序-车源宝微信版 [小程序源码]小程序-微赞社区(论坛demo) [小程序源码]微信小程序-收支账单 [小程序工具]微信小程序-日历 [小程序源码]小程序-在线聊天功能 [小程序源码]微信小程序-大好商城(新增功能天气查询和2048游戏) [小程序源码]微信小程序-查询号码归属地 [小程序源码]微信小程序-备忘录2 [小程序源码]微信小程序-QQ音乐 [小程序源码]小程序-货币汇率 [小程序源码]微信小程序-大学图书馆 [小程序源码]小程序-积分商城 [

分享一下微信小程序的实例【转】

wx-gesture-lock  微信小程序的手势密码 WXCustomSwitch 微信小程序自定义 Switch 组件模板 WeixinAppBdNovel 微信小程序demo:百度小说搜索 shitoujiandaobu 小程序:石头剪刀布(附代码说明) audiodemo 微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义 star 微信小程序开发之五星评分 switchCity 微信小程序开发之城市选择器 城市切换 huadong_del  微信小程序滑动删除效果 jianh

微信小程序开发交流与推广

一.请加微信群: 请扫描下方的二维码加“微信小程序交流推广群”,由于微信群的限制,超过 100 人就不能扫码加群,大家可以先添加微信号:us9488 并备注“微信小程序”,然后拉你入群. 二.官方文档: 微信小程序介绍 微信小程序设计指南 微信小程序开发文档 微信小程序运营规范 微信小程序开发者社区 三.微信小程序解决方案: 微信小程序会话管理场景 微信小程序文件上传下载应用场景 微信小程序WebSocket长连接应用场景 微信小程序视频应用场景 四.代码: 会话管理场景 文件上传下载应用场景