需求:
(1)完成一个计算器,可以进行多目运算,而且可以判断优先级.
设计思路:
(1)先画UI,设置好位置
(2)处理限制输入:
1.处理不能同时输入多个符号,不能重复输入符号
2.开头不能为* 和 ÷
3.÷后面的数字不能为0
4.处理小数点
5.处理=
6.处理以符号结尾的公式,自动删除
(3)设计一个数组进行历史记载
(4)设计退出键
代码如下:
//
// ViewController.h
// Calculator
// 作者:DRAGON-Yeah
// Created by 5016 on 13-12-20.
// Copyright (c) 2013年 dradon. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UITextFieldDelegate>
{
UITextField *textField;//输入与结果显示
UIButton *button;//按键
NSMutableString * str;//公式字符串
NSMutableArray *HistoryArr;//历史数组
}
@end
//
// ViewController.m
// Calculator
// 作者:DRAGON-Yeah
// Created by 5016 on 13-12-20.
// Copyright (c) 2013年 dradon. All rights reserved.
//
#import "ViewController.h"
#import "MessageHandle.h"
#import "ViewInit.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view setBackgroundColor:[UIColor colorWithRed:238/255.0 green:236/255.0 blue:238/255.0 alpha:1.0]];
//画UI
[self initControl];
str = [[NSMutableString alloc] init];
[str setString:@""];
HistoryArr = [[NSMutableArray alloc]init];
}
/*
*初始化控件
*/
-(void)initControl
{
[self initUItextField];
[self initUIbutton];
}
/*
*按键
*/
-(void)initUIbutton
{
//初始化 button
ViewInit *viewinit = [[ViewInit alloc]init];
for (int i = 0; i<20; i++) {
button = [viewinit btnInit:i];
//绑定事件
[button addTarget:self action:@selector(onclick:) forControlEvents:UIControlEventTouchDown];
//4.添加到视图控制器
[self.view addSubview:button];
[button release];
}
[viewinit release];
}
//按键响应事件
-(void)onclick:(UIButton*)btn
{
//按键处理
MessageHandle *msgHandle = [[MessageHandle alloc] init];
[str setString:[msgHandle onClick:btn.tag andStr:str andHistroy:HistoryArr]];
//显示处理
[self display];
}
/*
*显示处理
*/
-(void)display
{
if ([str length]>10) {
NSMutableString *tempStr = [[NSMutableString alloc]init];
[tempStr setString:str];
[tempStr setString:[str substringWithRange:NSMakeRange([str length]-10, 10)]];
[textField setText:tempStr];
[tempStr release];
}else{
[textField setText:str];
}
}
/*
*输入与结果
*/
-(void)initUItextField
{
//初始化 textField
ViewInit *viewinit = [[ViewInit alloc]init];
textField = [viewinit textFildInit];
[viewinit release];
//设置代理
textField.delegate = self;
[self.view addSubview:textField];
[textField release];
}
-(BOOL)textFieldShouldReturn:(UITextField *)_textField
{
[_textField resignFirstResponder];
return YES;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
//
// ViewInit.h
// Calculator
// 作者:DRAGON-Yeah
// Created by 5016 on 13-12-21.
// Copyright (c) 2013年 dradon. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface ViewInit : NSObject
//初始化控件
-(UITextField *)textFildInit;
-(UIButton *)btnInit:(int)i;
@end
//
// ViewInit.m
// Calculator
// 作者:DRAGON-Yeah
// Created by 5016 on 13-12-21.
// Copyright (c) 2013年 dradon. All rights reserved.
//
#import "ViewInit.h"
@implementation ViewInit
/*
*方法:textFildInit
*功能:textField初始化
*参数:无
*返回值:textField
*/
-(UITextField *)textFildInit
{
UITextField *textField = [UITextField alloc];//实例化textField
[textField initWithFrame:CGRectMake(20, 20, 280, 70)];
[textField setBackgroundColor:[UIColor colorWithRed:190/255.0 green:183/255.0 blue:165/255.0 alpha:0.5]];
[textField setFont:[UIFont fontWithName:@"Arial" size:45.0f]];
[textField setTextAlignment:NSTextAlignmentRight];
[textField setUserInteractionEnabled:NO];
[textField setBorderStyle:UITextBorderStyleRoundedRect];
[textField setTag:100];
return [textField autorelease];
}
/*
*方法:btnInit:(int)i
*功能:按钮初始化
*参数:
* i ---------按键号
*返回值:button
*/
-(UIButton *)btnInit:(int)i
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.titleLabel.font = [UIFont systemFontOfSize: 30.0];
[button setTitleColor:[UIColor grayColor] forState:UIControlContentHorizontalAlignmentCenter];
[button setBackgroundImage:[UIImage imageNamed:@"num.9.png"] forState:UIControlStateNormal];
if (i<4) {
[button setFrame:CGRectMake(22 + 72*i,110,60,60)];
switch (i) {
case 0:
[button setTitle:@"退出" forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize: 22.0];
[button setBackgroundImage:[UIImage imageNamed:@"0.9.png"] forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlContentHorizontalAlignmentCenter];
break;
case 1:
[button setTitle:@"历史" forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize: 22.0];
[button setBackgroundImage:[UIImage imageNamed:@"0.9.png"] forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlContentHorizontalAlignmentCenter];
break;
case 2:
[button setTitle:@"C" forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"C.9.png"] forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlContentHorizontalAlignmentCenter];
break;
case 3:
[button setTitle:@"" forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"x.9.png"] forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlContentHorizontalAlignmentCenter];
break;
}
}else if(i>=4 && i<8){
[button setFrame:CGRectMake(22 + 72*(i-4),10+110+60,60,60)];
switch (i) {
case 4:
[button setTitle:@"7" forState:UIControlStateNormal];
break;
case 5:
[button setTitle:@"8" forState:UIControlStateNormal];
break;
case 6:
[button setTitle:@"9" forState:UIControlStateNormal];
break;
case 7:
[button setTitle:@"" forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"sub.9.png"] forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlContentHorizontalAlignmentCenter];
break;
}
}else if(i>=8 && i<12){
[button setFrame:CGRectMake(22 + 72*(i-8),10+10+110+60+60,60,60)];
switch (i) {
case 8:
[button setTitle:@"4" forState:UIControlStateNormal];
break;
case 9:
[button setTitle:@"5" forState:UIControlStateNormal];
break;
case 10:
[button setTitle:@"6" forState:UIControlStateNormal];
break;
case 11:
[button setTitle:@"" forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"mul.9.png"] forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlContentHorizontalAlignmentCenter];
break;
}
}else if(i>=12 && i<16){
[button setFrame:CGRectMake(22 + 72*(i-12),10+10+10+110+60+60+60,60,60)];
switch (i) {
case 12:
[button setTitle:@"1" forState:UIControlStateNormal];
break;
case 13:
[button setTitle:@"2" forState:UIControlStateNormal];
break;
case 14:
[button setTitle:@"3" forState:UIControlStateNormal];
break;
case 15:
[button setTitle:@"" forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"-.9.png"] forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlContentHorizontalAlignmentCenter];
break;
}
}else{
[button setFrame:CGRectMake(22 + 72*(i-16),10+10+10+10+110+60+60+60+60,60,60)];
switch (i) {
case 16:
[button setTitle:@"." forState:UIControlStateNormal];
break;
case 17:
[button setTitle:@"0" forState:UIControlStateNormal];
break;
case 18:
[button setTitle:@"" forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"=.9.png"] forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlContentHorizontalAlignmentCenter];
break;
case 19:
[button setTitle:@"" forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"+.9.png"] forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlContentHorizontalAlignmentCenter];
break;
}
}
[button setTag:200+i];
[button setShowsTouchWhenHighlighted:YES];
return button;
}
//内存管理
-(void)dealloc
{
[super dealloc];
}
@end
//
// MessageHandle.h
// Calculator
// 作者:DRAGON-Yeah
// Created by 5016 on 13-12-21.
// Copyright (c) 2013年 dradon. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface MessageHandle : NSObject
//按键处理
-(NSMutableString *)onClick:(int)btnTag andStr:(NSMutableString *)str andHistroy:(NSMutableArray*)HistoryArr;
@end
//
// MessageHandle.m
// Calculator
// 作者:DRAGON-Yeah
// Created by 5016 on 13-12-21.
// Copyright (c) 2013年 dradon. All rights reserved.
//
#import "MessageHandle.h"
#import "CalculateResult.h"
@implementation MessageHandle
//标志按下=
BOOL equalFlag = NO;
//历史记录计数器
static int histroyNum = 0;
/*
*方法:dealEqualString:(NSMutableString*)str
*功能:按=之后是否继续按下符号或者数据
*参数:
* str ---------处理的字符串
*返回值:void
*/
-(void)dealEqualString:(NSMutableString*)str
{
if (equalFlag) {
equalFlag = NO;
NSString *temp = [str substringWithRange:NSMakeRange([str length]-1, 1)];
if (!([temp isEqualToString:@"+"]||[temp isEqualToString:@"-"]||[temp isEqualToString:@"*"]||[temp isEqualToString:@"/"])) {
[str setString:@""];
}
}
}
/*
*方法:Equaldisplay:(NSMutableString*)str
*功能:按=之后结果保留10位有效数字
*参数:
* str ---------处理的字符串
*返回值:void
*/
-(void)Equaldisplay:(NSMutableString*)str
{
if ([str length]>10) {
[str setString:[str substringWithRange:NSMakeRange(0, 10)]];
}
}
/*
*方法:dealEqual:(NSMutableString*)str
*功能:处理开始时候按下=,避免空指针异常
*参数:
* str ---------处理的字符串
*返回值:void
*/
-(void)dealEqual:(NSMutableString*)str
{
//处理空字符串出现异常
if ([str isEqual:@""]) {
[str setString:@" "];
}else{
[str setString:str];
}
NSSet *set =[NSSet setWithObjects:@"+",@"-",@"*",@"/",nil];
if ([set containsObject:[str substringWithRange:NSMakeRange([str length]-1, 1)]]) {
[str setString:[str substringWithRange:NSMakeRange(0,[str length]-1)] ];
}
}
/*
*方法:onClick:(int)btnTag andStr:(NSMutableString *)str
*功能:按键处理
*参数:
* btnTag---------按钮的标志
* str ---------处理的字符串
*返回值:str
*/
-(NSMutableString *)onClick:(int)btnTag andStr:(NSMutableString *)str andHistroy:(NSMutableArray*)HistoryArr
{
switch (btnTag) {
case 200:
NSLog(@"退出");
exit(0);
break;
case 201:
NSLog(@"历史");
if([HistoryArr count] == 0)//处理点击历史时候,没有数据崩溃
{
NSMutableString *ms =[[NSMutableString alloc]init];
[ms setString:@" "];
return [ms autorelease];
}
//让历史记录循环
if (histroyNum == [HistoryArr count]) {
histroyNum = 0;
}
[str setString:[HistoryArr objectAtIndex:histroyNum]];
histroyNum++;
equalFlag = YES;
break;
case 202:
NSLog(@"C");
[str setString:@""];
break;
case 203:
NSLog(@"xxx");
if ([str length]>0) {
NSMutableString *tempStr = [[NSMutableString alloc]init];
[tempStr setString:str];
[str setString:[tempStr substringWithRange:NSMakeRange(0, [tempStr length]-1)]];
[tempStr release];
}
break;
case 204:
NSLog(@"7");
[self dealEqualString:str];
[str appendString:@"7"];
break;
case 205:
NSLog(@"8");
[self dealEqualString:str];
[str appendString:@"8"];
break;
case 206:
NSLog(@"9");
[self dealEqualString:str];
[str appendString:@"9"];
break;
case 207:
NSLog(@"/");
[str appendString:@"/"];
//判断是否重复
[self dealRepeat:str andPram:@"/"];
[self dealRepeat:str andPram:@"."];
break;
case 208:
NSLog(@"4");
[self dealEqualString:str];
[str appendString:@"4"];
break;
case 209:
NSLog(@"5");
[self dealEqualString:str];
[str appendString:@"5"];
break;
case 210:
NSLog(@"6");
[self dealEqualString:str];
[str appendString:@"6"];
break;
case 211:
NSLog(@"*");
[str appendString:@"*"];
//判断是否重复
[self dealRepeat:str andPram:@"*"];
[self dealRepeat:str andPram:@"."];
break;
case 212:
NSLog(@"1");
[self dealEqualString:str];
[str appendString:@"1"];
break;
case 213:
NSLog(@"2");
[self dealEqualString:str];
[str appendString:@"2"];
break;
case 214:
NSLog(@"3");
[self dealEqualString:str];
[str appendString:@"3"];
break;
case 215:
NSLog(@"-");
[str appendString:@"-"];
//注意顺序不能调换
[self dealMinus:str andPram:@"-"];
[self dealRepeat:str andPram:@"-"];
[self dealRepeat:str andPram:@"."];
break;
case 216:
NSLog(@".");
[str appendString:@"."];
//判断是否重复
[self dealRepeatPoint:str andPram:@"."];
break;
case 217:
NSLog(@"0");
[self dealEqualString:str];
[str appendString:@"0"];
//[self dealZero:str andPram:@"/"];
break;
case 218:
NSLog(@"=");
equalFlag = YES;
[self dealEqual :str];
CalculateResult* result= [[CalculateResult alloc]init];
[str setString:[result getResult:str]];
[HistoryArr addObject:[result getResult:str]];//记录历史
// NSLog(@"HistoryArr = %@",HistoryArr);
// NSLog(@"res=%@",str);
[result release];
[self Equaldisplay:str];
break;
case 219:
NSLog(@"+");
[str appendString:@"+"];
[self dealRepeat:str andPram:@"+"];
[self dealMinus:str andPram:@"-"];
[self dealRepeat:str andPram:@"."];
break;
}
return str;
}
/*
*方法:dealRepeatPoint:(NSMutableString*)str andPram:(NSString*)Pram
*功能:控制重复小数点
*参数:
* str ---------处理的字符串
* Pram ---------匹配参数
*返回值:void
*/
-(void)dealRepeatPoint:(NSMutableString*)str andPram:(NSString*)Pram
{
NSSet *set =[NSSet setWithObjects:@"+",@"-",@"*",@"/",nil];
//去掉重复
BOOL flag = [set containsObject:[str substringWithRange:NSMakeRange([str length] - 1, 1)]];
if (flag) {//去掉第二个重复的
[str setString:[str substringWithRange:NSMakeRange(0,[str length]-1)] ];
}
NSInteger len = [str length];
NSMutableArray *marr = [[NSMutableArray alloc]init];
NSMutableArray *marr1 = [[NSMutableArray alloc]init];
//变成数组
for (NSInteger i = len-1; i >=0; i--) {
[marr addObject:[str substringWithRange:NSMakeRange(i, 1)]];
}
//NSLog(@"marr = %@",marr);
//向前遍历,直到符号或没有
for (int i = 0; i < [marr count]; i++) {
if ([set containsObject:[marr objectAtIndex:i]]) {
break;
}
if (i< [marr count] -1) {
[marr1 addObject:[marr objectAtIndex:i+1]];
}
}
//NSLog(@"marr1 = %@",marr1);
if ([marr1 containsObject:@"."]) {
[str setString:[str substringWithRange:NSMakeRange(0,[str length]-1)] ];
}
}
/*
*方法:dealZero:(NSMutableString*)str andPram:(NSString*)Pram
*功能:控制0
*参数:
* str ---------处理的字符串
* Pram ---------匹配参数
*返回值:void
*/
-(void)dealZero:(NSMutableString*)str andPram:(NSString*)Pram
{
//去掉重复
BOOL flag = [[str substringWithRange:NSMakeRange([str length]-2, 1)] isEqualToString:Pram];
if (flag) {//去掉第二个重复的
[str setString:[str substringWithRange:NSMakeRange(0,[str length]-1)] ];
}
}
/*
*方法:dealRepeat:(NSMutableString*)str andPram:(NSString*)Pram
*功能:处理重复出现的符号
*参数:
* str ---------处理的字符串
* Pram ---------匹配参数
*返回值:void
*/
-(void)dealRepeat:(NSMutableString*)str andPram:(NSString*)Pram
{
NSSet *set =[NSSet setWithObjects:@"+",@"-",@"*",@"/",nil];
//NSLog(@"%@",set);
//去掉重复
BOOL flag = [[str substringWithRange:NSMakeRange([str length]-2, 1)] isEqualToString:Pram];
if (flag) {//去掉第二个重复的
[str setString:[str substringWithRange:NSMakeRange(0,[str length]-1)] ];
}
//不能输入多个符号
if ([set containsObject:[str substringWithRange:NSMakeRange([str length]-2, 1)]]) {
[str setString:[str substringWithRange:NSMakeRange(0,[str length]-1)] ];
}
//开头字符不能为÷ x
if ([str isEqualToString:@"/"] || [str isEqualToString:@"*"]) {
//NSLog(@"第一个字符不能为x或÷");
[str setString:@""];
}
}
/*
*方法:dealMinus:(NSMutableString*)str andPram:(NSString*)Pram
*功能:处理减号(--得正)
*参数:
* str ---------处理的字符串
* Pram ---------匹配参数
*返回值:void
*/
-(void)dealMinus:(NSMutableString*)str andPram:(NSString*)Pram
{
BOOL flag = [[str substringWithRange:NSMakeRange([str length]-2, 1)] isEqualToString:Pram];
if (flag) {//去掉第二个重复的
[str setString:[str substringWithRange:NSMakeRange(0,[str length]-2)] ];
[str appendString:@"+"];
}
flag = [[str substringWithRange:NSMakeRange([str length]-2, 1)] isEqualToString:@"+"];
if (flag) {//去掉第二个重复的
[str setString:[str substringWithRange:NSMakeRange(0,[str length]-2)] ];
[str appendString:@"-"];
}
}
//内存管理
-(void)dealloc
{
[super dealloc];
}
@end
//
// CalculateResult.h
// Calculator
// 作者:DRAGON-Yeah
// Created by 5016 on 13-12-23.
// Copyright (c) 2013年 dradon. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface CalculateResult : NSObject
//计算结果,并返回结果
-(NSString *)getResult:(NSMutableString *)str;
@end
//
// CalculateResult.m
// Calculator
// 作者:DRAGON-Yeah
// Created by 5016 on 13-12-23.
// Copyright (c) 2013年 dradon. All rights reserved.
//
#import "CalculateResult.h"
@implementation CalculateResult
/*
*方法:contains:(NSString*)str1 andStr:(NSString*)str2
*功能:判断字符串是否包含某个字符
*参数:
* str1 ---------处理的字符串
* str2 ---------匹配的字符串
*返回值:flag
*/
-(BOOL)contains:(NSString*)str1 andStr:(NSString*)str2
{
BOOL flag = NO;
for (int i =0 ; i < str1.length; i++) {
NSString *temp = [str1 substringWithRange:NSMakeRange(i, 1)];
if ([temp isEqualToString:str2]) {
flag = YES;
}
}
return flag;
}
/*
*方法:dealWithPointZero:(NSMutableString *)str
*功能:判断/后面是否为0
*参数:
* str ---------处理的字符串
*返回值:YES/NO
*/
-(BOOL)dealWithPointZero:(NSMutableString *)str
{
NSMutableString *mstr = [str copy];
NSMutableArray *marr = [[NSMutableArray alloc]init];
NSArray *arr = [mstr componentsSeparatedByString:@"/"];
for (NSString *str0 in arr) {
[marr addObject:str0];
}
NSSet *set =[NSSet setWithObjects:@"+",@"-",@"*",@"/",nil];
NSMutableString *mstr1 = [[NSMutableString alloc]init];
// NSLog(@"marr = %@",marr);
for (NSString *s in marr)
{
for (int i = 0; i< [s length]; i++)
{
NSString *temp = [s substringWithRange:NSMakeRange(i, 1)];
if ([set containsObject:temp])
{
break;
}
[mstr1 appendString:temp];
}
if([mstr1 doubleValue] == 0)//如果有0
{
return YES;
}
[mstr1 setString:@""];//清空,保证每次只有一个数
}
[mstr1 release];
[mstr release];
return NO;
}
/*
*方法:getResult:(NSMutableString *)str
*功能:返回处理好并且运算好的结果
*参数:
* str ---------处理的字符串
*返回值:[[NSNumber numberWithDouble:result] stringValue]
*/
-(NSString *)getResult:(NSMutableString *)str
{
double MSresult = 0.0;//乘除结果
double ADresult = 0.0;//加减结果
double result = 0.0;//总结果
// NSMutableString *string = [[NSMutableString alloc]init];
// [string setString:@".8-2.78+5-6-8+34-35*23/34/32*45+12+457+2/6*47*78/12-56-78"];
/*处理/.0000000*/
if ([self dealWithPointZero:str]) {
return str;
}
[self dealWithPointZero:str];
NSMutableString *string = str;//接收传来字符串
NSMutableArray *marr = [[NSMutableArray alloc] init];
//1.以+号分离
NSArray *arr1 = [string componentsSeparatedByString:@"+"];
//NSLog(@"arr1 = %@",arr1);
for (NSString *str0 in arr1) {
//NSLog(@"str0 = %@",str0);
NSArray *arr2 = [str0 componentsSeparatedByString:@"-"];
for (int i = 0; i<[arr2 count]; i++) {
NSString *temp = [arr2 objectAtIndex:i];
NSString *temp1 = @"-";
NSString *temp2 = @"";
// NSLog(@"temp = %@",temp);
if (i>0) {
temp2 = [temp1 stringByAppendingFormat:@"%@",temp];
}else{
temp2 = temp;
}
[marr addObject:temp2];
}
}
NSLog(@"marr = %@",marr);
NSMutableArray *marr1 = [[NSMutableArray alloc] init];
NSMutableArray *marr2 = [[NSMutableArray alloc] init];
//优先级分离出+- 与 */
for (NSString *s in marr) {
if ([self contains:s andStr:@"*"]||[self contains:s andStr:@"/"]) {
[marr1 addObject:s];//乘除
}else{
[marr2 addObject:s];//OK 加减
}
}
//处理乘除,获取结果
for (NSString *s in marr1) {
//NSLog(@"s=%@",s);
MSresult += [self tempResult:s];
}
NSLog(@"MSresult = %lf",MSresult);
//处理加减,获取结果
ADresult = [self aluResult:marr2];
NSLog(@"ADresult = %lf",ADresult);
//求总结果
result = MSresult + ADresult;
NSLog(@"result = %lf",result);
[marr release];
[marr1 release];
[marr2 release];
return [[NSNumber numberWithDouble:result] stringValue];
}
/*
*方法:tempResult:(NSString*)str
*功能:返回乘除的每一条结果
*参数:
* str ---------处理的字符串
*返回值:result
*/
-(double)tempResult:(NSString*)str
{
double result = 0.0;
NSMutableArray *marr = [[NSMutableArray alloc]init];
NSArray *arr = [str componentsSeparatedByString:@"*"];
for (int i = 0 ; i<[arr count] ; i++) {
// NSLog(@"s=%@",s);
NSString *temp = [arr objectAtIndex:i];
NSString *temp1 = @"*";
NSString *temp2 = @"";
if (i>0) {
temp2 = [temp1 stringByAppendingFormat:@"%@",temp];
}else{
temp2 = temp;
}
//NSLog(@"temp2=%@",temp2);
NSArray *arr1 = [temp2 componentsSeparatedByString:@"/"];
for (int j=0 ;j<[arr1 count]; j++) {
// NSLog(@"s1=%@",[arr1 objectAtIndex:j]);
NSString *t = [arr1 objectAtIndex:j];
NSString *t1 = @"/";
NSString *t2 = @"";
if (j>0) {
t2 = [t1 stringByAppendingFormat:@"%@",t];
}else{
t2 = t;
}
// NSLog(@"t2 = %@",t2);
[marr addObject:t2];
}
}
//计算值
result = [self aluMS:marr];
return result;
}
/*
*方法:aluMS:(NSMutableArray*)marr
*功能:返回乘除的一条结果
*参数:
* marr ---------处理的一条乘除公式的数组
*返回值:res
*/
-(double)aluMS:(NSMutableArray*)marr
{
double res=1.0*[[marr objectAtIndex:0] doubleValue];
// NSLog(@"res = %lf",res);
for (int i = 1; i<[marr count]; i++) {
// NSLog(@"res =%@",[marr objectAtIndex:i]);
NSString *temp = [marr objectAtIndex:i];
NSString *first = [temp substringWithRange:NSMakeRange(0, 1)];
NSString *second = [temp substringWithRange:NSMakeRange(1, [temp length]-1)];
//NSLog(@"first = %@",first);
//NSLog(@"second = %@",second);
if ([first isEqualToString:@"*"]) {
res = res*[second doubleValue];
}else if([first isEqualToString:@"/"]){
res = res/[second doubleValue];
}
}
// NSLog(@"res = %lf",res);
return res;
}
/*
*方法:aluResult:(NSMutableArray*)marr
*功能:返回累加结果
*参数:
* marr ---------处理的一条加减公式的数组
*返回值:result
*/
-(double)aluResult:(NSMutableArray*)marr
{
//NSLog(@"加减marr = %@",marr);
double result = 0.0;
for (int i = 0; i<[marr count]; i++) {
NSString *temp = [marr objectAtIndex:i];
//NSLog(@"加减 = %@",temp);
result += [temp doubleValue];
}
return result;
}
//内存管理
-(void)dealloc
{
[super dealloc];
}
@end

本文介绍了一个具备多目运算及优先级判断功能的iOS计算器的设计与实现过程,包括UI布局、输入限制处理、历史记录保存等功能。

被折叠的 条评论
为什么被折叠?



