ios - EXC_ARITHMETIC Error Objective C -
#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; (int = 0; < 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]; = + 1; } else { [newsymbols addobject:symbols[i]]; } } } (int = 0; < newsymbols.count; i++){ if (i%2 == 1){ result = [self calcnumbers:newsymbols[i] andnumberone:newsymbols[i-1] andnumbertwo:newsymbols[i+1]]; } } return result; } @end
this class. trying run rpn calculator in command line. in calcnumbers method, there exc_arithmetic error. think asterisk working (all) unix_command. how can fix this? in advance
i don't think doing in postfix
correct, don't know trying do.
the crash happens because sending bad values calcnumbers
. bad values mean values in unexpected order.
for example, if myoperator
@"10"
, numbertwo
*
, enter else
branch:
result = [numberone integervalue] % [numbertwo integervalue];
and dividing (calculating modulo) zero, cause crash (you cannot divide zero).
how find problem (not actual solution):
add
nslog(@"operator %@, operands: %@, %@", myoperator, numberone, numbertwo);
that should see values passed function , find problem.
Comments
Post a Comment