[英]Thread 1:EXC_ARITHMETIC(code=EXC_I386_DIV,subcode=0x0) in Objective c?
[英]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;
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。 我怎樣才能解決這個問題? 提前致謝
我不認為您現在在postFix
中所做的postFix
是正確的,我什至不知道您要做什么。
之所以發生崩潰,是因為您向calcNumbers
發送了錯誤的值。 差值是指意外順序的值。
例如,如果myOperator
是@"10"
而numberTwo
是*
,那么您將進入else
分支:
result = [numberOne integerValue] % [numberTwo integerValue];
並且您將被零除(計算模),這將導致崩潰(您不能被零除)。
如何查找問題(不是實際的解決方案):
加
NSLog(@"Operator %@, operands: %@, %@", myOperator, numberOne, numberTwo);
這應該可以幫助您查看將哪些值傳遞給函數並找到問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.