首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EXC_ARITHMETIC错误目标C

EXC_ARITHMETIC错误目标C
EN

Stack Overflow用户
提问于 2017-04-08 01:46:54
回答 1查看 142关注 0票数 1
代码语言:javascript
复制
#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工作。我该如何解决这个问题呢?提前感谢

EN

回答 1

Stack Overflow用户

发布于 2017-04-08 02:10:20

我不认为你现在在postFix中做的是正确的,我甚至不知道你想要做什么。

崩溃的发生是因为您向calcNumbers发送了错误的值。我所说的坏值是指以意想不到的顺序的值。

例如,如果myOperator@"10"numberTwo*,则您将输入else分支:

代码语言:javascript
复制
 result = [numberOne integerValue] % [numberTwo integerValue];

并且您将除以零(计算模数),这将导致崩溃(您不能除以零)。

如何找到问题(不是实际的解决方案):

添加

代码语言:javascript
复制
NSLog(@"Operator %@, operands: %@, %@", myOperator, numberOne, numberTwo);

这将帮助您查看传递给函数的值,并找到问题所在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43284227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档