2017-04-07 4 views
0
#import "Calculator.h" 

@implementation Calculator 

- (long) calcNumbers:(NSString *)myOperator andNumberOne:(NSString *)numberOne andNumberTwo:(NSString *)numberTwo { 

    long result; 

    if ([myOperator isEqualToString:@"+"]){ 
     result = [numberOne integerValue] + [numberTwo integerValue]; 
    } else if ([myOperator isEqualToString:@"-"]) { 
     result = [numberOne integerValue] - [numberTwo integerValue]; 
    } else if ([myOperator isEqualToString:@"*"]){ 
     result = [numberOne integerValue] * [numberTwo integerValue]; 
    } else if ([myOperator isEqualToString:@"/"]) { 
     result = [numberOne integerValue]/[numberTwo integerValue]; 
    } else { 
     result = [numberOne integerValue] % [numberTwo integerValue]; 
    } 

    return result; 

} 


- (long) postFix:(NSMutableArray *)symbols 
{ 

    NSMutableArray * newSymbols = [[NSMutableArray alloc]init]; 
    NSString * operatorSigns = @"*/%"; 
    long result = 0; 

    for (int i = 0; i < symbols.count; i++){ 

     // operand 
     if (i%2 == 0){ 
      [newSymbols addObject:symbols[i]]; 
     } else { // operator 

      if ([operatorSigns containsString:symbols[i]]){ 
       result = [self calcNumbers:symbols[i] andNumberOne:symbols[i-1] andNumberTwo:symbols[i+1]]; 
       [newSymbols insertObject:[NSNumber numberWithLong:result] atIndex:i-1]; 
       i = i + 1; 
      } else { 
       [newSymbols addObject:symbols[i]]; 
      } 
     } 
    } 

    for (int i = 0; i < newSymbols.count; i++){ 
     if (i%2 == 1){ 
      result = [self calcNumbers:newSymbols[i] andNumberOne:newSymbols[i-1] andNumberTwo:newSymbols[i+1]]; 
     } 
    } 

    return result; 
} 

@end 

이것은 내 수업입니다. 명령 줄에서 RPN 계산기를 실행하려고합니다. 그러나 calcNumbers 메서드에는 EXC_Arithmetic 오류가 있습니다. 나는 별표가 (모든) unix_command로 작동하고 있다고 생각한다. 이 문제를 어떻게 해결할 수 있습니까? 미리 감사드립니다.EXC_ARITHMETIC 오류 목표 C

+0

이 오류는 아마도 0으로 나누는 것을 의미합니다 ('/'또는'% '연산자). 그 사건을 해결해야합니다. – Sulthan

+1

'postFix' 함수에 대한 입력을 추가하십시오. – Sulthan

답변

0

postFix에서 현재하고있는 일이 정확하다고 생각하지 않습니다. 당신이 무엇을하려고하는지조차 알지 못합니다.

잘못된 값을 calcNumbers (으)로 보내기 때문에 충돌이 발생합니다. 나쁜 값은 뜻하지 않은 순서로 값을 의미합니다. 당신은 (

result = [numberOne integerValue] % [numberTwo integerValue]; 

당신은 충돌의 원인이되는, 0으로 (계산 모듈)을 구분됩니다

myOperator@"10"numberTwo* 인 경우 예를 들어, 당신은 else 분기를 입력합니다 0으로 나눌 수 없다). 문제 (아닌 실제 솔루션) 찾는 방법

:

추가를하면 값이 함수에 전달하고 문제를 찾아 무엇을보고 도움이 될 것입니다

NSLog(@"Operator %@, operands: %@, %@", myOperator, numberOne, numberTwo); 

.