2017-05-06 90 views
0

所以我參加了一個Xcode Objective-C課程,我們必須製作一個計算器。除了我必須創建一個例外情況的部分,除非有人試圖用零來除。我不能爲了我的生活得到它的工作,我一直得到的是我的計算器上的INF消息。他們也希望它是一個@try @catch方法,所以我的Google搜索引導我自己問這個問題,因爲我找不到答案。這是我的完整代碼。除以零異常 - Objective-C

#import "Calculator.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize numerator, denominator, total, operand, theNumber, lblText; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self setNumerator:0]; 
    [self setDenominator:0]; 
    [self setOperand:PLUS]; 
    [self setTotal:0.0]; 
    [self setTheNumber:@""]; 

    [self printNumber]; 
} 

-(void)printNumber 
{ 
    [lblText setText:theNumber]; 
} 

-(float)divideOp 
    { 
    float result=0; 
    @try { 
     if (self.denominator != 0) { 
      result = (self.numerator/self.denominator); 
     } else { 
      result = NAN; 
     } 
    } @catch (NSException *exception) { 
     // deal with the exception 
     NSLog(@"Can't divide by 0!"); 
    } 

    return result; 
} 

-(IBAction)calculate:(id)sender 
{ 
    denominator = [theNumber integerValue]; 

    if(operand == PLUS) 
     total = numerator + denominator; 
    else if(operand == MINUS) 
     total = numerator - denominator; 
    else if(operand == MULTIPLY) 
     total = numerator * denominator; 

    theNumber = [NSString stringWithFormat:@"%f",total]; 
    [self printNumber]; 

    numerator = 0; 
    denominator = 0; 
    total = 0.0; 
} 

-(void)saveNumerator 
{ 
    numerator = [theNumber integerValue]; 
    theNumber = @"0"; 
    [self printNumber]; 
} 

-(IBAction)clearNum:(id)sender 
{ 
    theNumber = @"0"; 
    [self printNumber]; 

} 
-(IBAction)setPlus:(id)sender 
{ 
    [self saveNumerator]; 
    operand = PLUS; 
} 

-(IBAction)setMinus:(id)sender 
{ 
    [self saveNumerator]; 
    operand = MINUS; 
} 

-(IBAction)setMultiply:(id)sender 
{ 
    [self saveNumerator]; 
    operand = MULTIPLY; 
} 

-(IBAction)setDivide:(id)sender 
{ 
    [self saveNumerator]; 
    operand = DIVIDE; 
} 

-(IBAction)press9:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"9"]; 
    [self printNumber]; 
} 

-(IBAction)press8:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"8"]; 
    [self printNumber]; 
} 

-(IBAction)press7:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"7"]; 
    [self printNumber]; 
} 

-(IBAction)press6:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"6"]; 
    [self printNumber]; 
} 

-(IBAction)press5:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"5"]; 
    [self printNumber]; 
} 

-(IBAction)press4:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"4"]; 
    [self printNumber]; 
} 

-(IBAction)press3:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"3"]; 
    [self printNumber]; 
} 

-(IBAction)press2:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"2"]; 
    [self printNumber]; 
} 

-(IBAction)press1:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"1"]; 
    [self printNumber]; 
} 

-(IBAction)press0:(id)sender 
{ 
    theNumber = [theNumber stringByAppendingString:@"0"]; 
    [self printNumber]; 
} 

@end 
+0

請只發表相關的代碼。你發佈的大部分代碼與你的問題無關。 – rmaddy

+0

根據你對'@ synthesize'的非常過時的使用來判斷,我希望你能找到更多最新的教程。 – rmaddy

回答

0

,而不是設置的:

result = NAN; 

當你除以零,你應該

NSException *e = [NSException 
    exceptionWithName:@"Divide By Zero" 
    reason:@"Divide by Zero Exception" 
    userInfo:nil]; 
@throw e; 

不要趕在divideOp方法例外...抓住它在任何常規應該打印計算結果並打印出來,試圖通過零操作進行非法除法。

+0

所以我需要把你剛剛放在@catch目前所在的位置,並將整個事件放入IBAction部分?對不起,這實際上是我在星期二開始的第一週,所以很難理解你在divideOp方法中沒有捕捉到異常的含義。 –