2017-05-06 10 views
0

Xcode Objective-C 코스를 선택하고 계산기를 만들어야합니다. 누군가가 0으로 나눈다면 예외를 만들어야하는 부분을 제외하고는 모두 작동합니다. 나는 내 삶이 작동하도록 할 수는 없으며 내가 계속 얻는 것은 내 계산기의 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

:

는 0으로 나눌
result = NAN; 

당신이해야

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

어떤 루틴에서 그것을 잡을 ... divideOp 방법에서 예외를 catch하지 마십시오 계산 결과를 출력하고 제로 연산에 의한 불법 제산이 시도되었음을 표시합니다.

+0

그래서 @catch가 현재있는 곳에 넣고 그 전체를 IBAction 섹션으로 옮겨야합니까? 미안 해요 화요일에 시작된이 수업의 처음 주입니다. 따라서 divideOp 메소드에서 예외를 잡아 내지 못한다는 것을 이해하는 것은 어렵습니다. –