#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错误。我认为asterisk正在作为(所有) unix_command工作。我该如何解决这个问题呢?提前感谢
发布于 2017-04-08 02:10:20
我不认为你现在在postFix中做的是正确的,我甚至不知道你想要做什么。
崩溃的发生是因为您向calcNumbers发送了错误的值。我所说的坏值是指以意想不到的顺序的值。
例如,如果myOperator为@"10",numberTwo为*,则您将输入else分支:
result = [numberOne integerValue] % [numberTwo integerValue];并且您将除以零(计算模数),这将导致崩溃(您不能除以零)。
如何找到问题(不是实际的解决方案):
添加
NSLog(@"Operator %@, operands: %@, %@", myOperator, numberOne, numberTwo);这将帮助您查看传递给函数的值,并找到问题所在。
https://stackoverflow.com/questions/43284227
复制相似问题