簡體   English   中英

EXC_ARITHMETIC錯誤目標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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM