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