这个计算器主要是使用数组进行实现的.虽然没有使用前缀后缀表达式,但是是一种方法o.

.h文件

//
// LCViewController.h
// 具有优先级的calculator
//
// Created by lichan on 13-12-4.
// Copyright (c) 2013年 com.lichan. All rights reserved.
// #import <UIKit/UIKit.h> @interface LCViewController : UIViewController
@property (retain, nonatomic) IBOutlet UITextField *textField;
@property (retain, nonatomic) IBOutlet UITextField *longTextField; @property (strong,nonatomic)NSMutableArray *numbersArray; @property (strong,nonatomic)NSMutableArray *operateArray; @property (copy,nonatomic)NSString *numberTempString; - (IBAction)longTextField:(id)sender; - (IBAction)numberPressed:(id)sender;
- (IBAction)clearScreen:(id)sender; - (IBAction)operatePressed:(UIButton *)sender;
- (IBAction)equalOperate:(id)sender;
@end

.m文件

//
// LCViewController.m
// 具有优先级的calculator
//
// Created by lichan on 13-12-4.
// Copyright (c) 2013年 com.lichan. All rights reserved.
// #import "LCViewController.h" @interface LCViewController () @end @implementation LCViewController - (void)viewDidLoad
{
[super viewDidLoad];
_numberTempString = [[NSMutableString alloc]init];
_numbersArray = [[NSMutableArray alloc]init];
_operateArray = [[NSMutableArray alloc]init];
// Do any additional setup after loading the view, typically from a nib.
} -(void)dealloc
{
[_numberTempString release];
[_textField release];
[_numbersArray release];
[_operateArray release];
[_longTextField release];
[super dealloc]; } - (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} - (IBAction)numberPressed:(id)sender { UIButton *tempButton = (UIButton *)sender; NSString *tempNumber = [tempButton titleLabel].text;//得到button的title值,以便于在textField显示 [_textField setText:[NSString stringWithFormat:@"%@%@",_textField.text,tempNumber]]; //textfield 上字符串的连接,以便于形成字符串 [_longTextField setText:[NSString stringWithFormat:@"%@%@",_longTextField.text,tempNumber]]; _numberTempString = _textField.text; } - (IBAction)clearScreen:(id)sender { [_numbersArray removeAllObjects];
[_operateArray removeAllObjects];
_numberTempString = nil;
[_textField setText:@""];
[_longTextField setText:@""];
} - (IBAction)operatePressed:(UIButton *)sender { UIButton *tempButton = (UIButton *)sender; NSString *temp = [tempButton titleLabel].text;//得到button的title值,以便于在textField显示 [_longTextField setText:[NSString stringWithFormat:@"%@%@",_longTextField.text,temp]]; if (_textField.text != nil) { [_numbersArray addObject:_numberTempString]; NSLog(@"---_numbersArray%@",_numbersArray); [_textField setText:@""]; [_operateArray addObject:sender.currentTitle];
NSLog(@"_operateArray %@",_operateArray);
}
else if (_textField.text == nil)
{
[_operateArray removeLastObject];
[_operateArray addObject:sender.currentTitle];
NSLog(@"_operateArray %@",_operateArray);
} } - (IBAction)equalOperate:(id)sender { UIButton *tempButton = (UIButton *)sender; NSString *temp = [tempButton titleLabel].text;//得到button的title值,以便于在textField显示 [_longTextField setText:[NSString stringWithFormat:@"%@%@",_longTextField.text,temp]]; if (_textField.text != nil) { [_numbersArray addObject:_numberTempString]; NSLog(@"---_numbersArray%@",_numbersArray); } //----------------
NSString *result = [[NSString alloc]init]; while (_numbersArray.count >= 3 )
{ NSString *firstOperate = [_operateArray objectAtIndex:0];
NSString *sencondOperate = [_operateArray objectAtIndex:1]; NSString *firstNumber = [_numbersArray objectAtIndex:0];
NSString *sencondNumber = [_numbersArray objectAtIndex:1];
NSString *thirdNumber = [_numbersArray objectAtIndex:2]; if ([firstOperate isEqualToString:@"+"] ||[firstOperate isEqualToString:@"-"])
{
if ([sencondOperate isEqualToString:@"*"] ||[sencondOperate isEqualToString:@"/"])
{ if ([sencondOperate isEqualToString:@"*"]) {
result = [self multiOperatorSymbolByOne:sencondNumber Two:thirdNumber]; }
if ([sencondOperate isEqualToString:@"/"]) {
result = [self divOperatorSymbolByOne:sencondNumber Two:thirdNumber]; }
[_operateArray removeObjectAtIndex:1]; [_numbersArray removeObjectAtIndex:2];
[_numbersArray replaceObjectAtIndex:1 withObject:result];
NSLog(@"num:%@",_numbersArray); }
else
{
NSString *result = [[NSString alloc]init];
if ([firstOperate isEqualToString:@"+"]) {
result = [self plusOperatorSymbolByOne:firstNumber Two:sencondNumber]; }
if ([firstOperate isEqualToString:@"-"]) {
result = [self subOperatorSymbolByOne:firstNumber Two:sencondNumber]; } [_operateArray removeObjectAtIndex:0]; [_numbersArray replaceObjectAtIndex:0 withObject:result];
[_numbersArray removeObjectAtIndex:1]; NSLog(@"%@",_numbersArray); } }
else
{
NSString *firstOperate = [_operateArray objectAtIndex:0]; NSString *firstNumber = [_numbersArray objectAtIndex:0];
NSString *sencondNumber = [_numbersArray objectAtIndex:1]; if ([firstOperate isEqualToString:@"*"]) {
result = [self multiOperatorSymbolByOne:firstNumber Two:sencondNumber]; } if ([firstOperate isEqualToString:@"/"]) {
result = [self divOperatorSymbolByOne:firstNumber Two:sencondNumber]; } [_operateArray removeObjectAtIndex:0]; [_numbersArray removeObjectAtIndex:1];
[_numbersArray replaceObjectAtIndex:0 withObject:result];
NSLog(@"%@",_numbersArray); } } NSString *firstOperate = [_operateArray objectAtIndex:0]; NSString *firstNumber = [_numbersArray objectAtIndex:0];
NSString *sencondNumber = [_numbersArray objectAtIndex:1];
NSLog(@"%@",_numbersArray); if ([firstOperate isEqualToString:@"*"]) {
result = [self multiOperatorSymbolByOne:firstNumber Two:sencondNumber]; }
if ([firstOperate isEqualToString:@"/"]) {
result = [self divOperatorSymbolByOne:firstNumber Two:sencondNumber]; } if ([firstOperate isEqualToString:@"+"]) {
result = [self plusOperatorSymbolByOne:firstNumber Two:sencondNumber]; }
if ([firstOperate isEqualToString:@"-"]) {
result = [self subOperatorSymbolByOne:firstNumber Two:sencondNumber]; } NSLog(@"result : %@",result); [_longTextField setText:[NSString stringWithFormat:@"%@%@",_longTextField.text,result]]; } #pragma mark 操作符号 method - (NSString *)plusOperatorSymbolByOne:(NSString *)str1 Two:(NSString *)str2
{
float num1 = [str1 floatValue];
float num2 = [str2 floatValue]; float resultNum = num1 + num2; return [NSString stringWithFormat:@"%f",resultNum]; } - (NSString *)subOperatorSymbolByOne:(NSString *)str1 Two:(NSString *)str2
{
float num1 = [str1 floatValue];
float num2 = [str2 floatValue]; float resultNum = num1 - num2; return [NSString stringWithFormat:@"%f",resultNum]; } - (NSString *)multiOperatorSymbolByOne:(NSString *)str1 Two:(NSString *)str2
{
float num1 = [str1 floatValue];
float num2 = [str2 floatValue]; float resultNum = num1 * num2; return [NSString stringWithFormat:@"%f",resultNum]; } - (NSString *)divOperatorSymbolByOne:(NSString *)str1 Two:(NSString *)str2
{
float num1 = [str1 floatValue];
float num2 = [str2 floatValue]; float resultNum = num1 / num2; return [NSString stringWithFormat:@"%f",resultNum]; } @end

[课堂实践与项目]IOS优先级的计算器的更多相关文章

  1. [课堂实践与项目]IOS只能进行简单的加减乘除的没有优先级的计算器

    // // LCViewController.m // calculator // // Created by lichan on 13-12-3. // Copyright (c) 2013年 co ...

  2. [课堂实践与项目]手机QQ客户端--4期(SQLite的加入,注册,找回,登录界面的修改):建立关于QQ注册类,使用SQLite进行存储,

    经过昨天下午和今天上午的不懈努力,终于通过了SQLite的学习. 我们现在这里定义一个有关SQLIte的封装类,便于我在后面的用户注册,用户密码找回,和登录界面的使用 1.首先我们看看我们建立的use ...

  3. [课堂实践与项目]NavigationController与TabBarController的综合使用及易错点分析(包含消息提醒,app更新)

    陈述:我们在使用tabbarController的时候,我们总会和NavagationController联合起来.但是不联合的时候又是什么样的一种pool的情况呢?我们就单单的 TabBarCont ...

  4. 《Java 程序设计》课堂实践项目-简易计算器

    <Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...

  5. 2016-2017-2 《Java 程序设计》课堂实践项目

    目录 基本工具 基础内容 Hello World 和 模块分解 数组的使用 命令行参数 递归 分支语句 String类的使用 类的定义与测试 多态 IO与异常 数据库 网络与安全 数据结构应用 And ...

  6. 《Java 程序设计》课堂实践项目汇总链接

    1.<Java 程序设计>课堂实践项目-命令行参数 2.<Java 程序设计>课堂实践项目-mini dc 3.<Java 程序设计>课堂实践项目-Arrays和S ...

  7. 《Java 程序设计》课堂实践项目 课后学习总结

    <Java 程序设计>课堂实践项目 课后学习总结 String类的使用(sort) 目录 Linux命令(sort) 课堂实践 课后思考 学习老师的代码之后的思考:int与Integer ...

  8. 《Java 程序设计》课堂实践项目-类定义

    <Java 程序设计>课堂实践项目类定义 课后学习总结 目录 改变 类定义实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改. ...

  9. 《Java 程序设计》课堂实践项目-Arrays和String单元测试

    <Java 程序设计>课堂实践项目-Arrays和String单元测试 课后学习总结 目录 改变 Arrays和String单元测试实验要求 课堂实践成果 课后思考 改变 修改了博客整体布 ...

随机推荐

  1. 20150706 js之定时器

    对应智能社:09 定时器的使用 开启定时器: setInterval(xxx(),1000);//间隔型 第一个参数为函数,第二个为时间,单位为毫秒 setTimeout(xxx(),1000);// ...

  2. #AzureChat - 自动伸缩和虚拟机

    我们很高兴地推出再一次 #AzureChat,这是 @WindowsAzure 团队为您精心打造的一个在 Twitter 上进行的聊天活动! #AzureChat 专注于云计算的各个方面以及云开发的最 ...

  3. linux C函数之access函数的用法

    1.函数功能: 检查调用进程是否可以对指定的文件执行某种操作. 2.函数原型: 1)函数头文件 #include <stdio.h> #include <unistd.h> 2 ...

  4. BNU 26579 Andrew the Ant 【蚂蚁】

    链接: http://www.bnuoj.com/bnuoj/problem_show.php?pid=26579 http://www.bnuoj.com/bnuoj/contest_show.ph ...

  5. 问题在哪?动态菜单条-------Day86

    今天做了一个动态菜单条,先上图片,简单说一下我想实现的效果: 就是以下这个地方,随着鼠标指到哪,它就划到哪,并有一个惯性的幅度,并且滑动距离越远,停住的时候惯性越大,摆动幅度越大,这就是我大概想实现的 ...

  6. docker学习笔记6:利用dockerfile创建镜像介绍(生成简单web服务器镜像)

    本文介绍如何利用dockerfile来创建镜像.下面介绍具体的操作过程: 一.创建构建环境 操作示例如下: xxx@ubuntu:~$ pwd /home/xxx xxx@ubuntu:~$ mkdi ...

  7. Java正则表达式基本应用

    一.概述 正则表达式因为其强大的字符串处理能力,刚开始被被广泛地应用到各种UNIX工具中,如大家熟知的 Perl脚本语言 .后来正则表达式在各种 计算机语言 和各种应用领域得到了广泛的应用和发展,目前 ...

  8. 基于visual Studio2013解决算法导论之009快速排序随机版本

     题目 快速排序随机版本 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> ...

  9. 基于visual Studio2013解决C语言竞赛题之0901文件读写

       题目

  10. SQL 多个表之间联合查询

    非常少用join,这次学学,并备忘两篇文章! 转自:http://hcx-2008.javaeye.com/blog/285661 连接查询 通过连接运算符能够实现多个表查询.连接是关系数据库模型的主 ...