这个计算器主要是使用数组进行实现的.虽然没有使用前缀后缀表达式,但是是一种方法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