Ios EXC_算术错误目标C #导入“Calculator.h” @实现计算器 -(长)计算编号:(NSString*)我的运算符和numberOne:(NSString*)numberOne和NUMBERWO:(NSString*)NUMBERWO{ 长期结果; if([myOperator isEqualToString:@“+”])){ 结果=[numberOne integerValue]+[numberTwo integerValue]; }else if([myOperator isEqualToString:@“-”]){ 结果=[numberOne integerValue]-[numberTwo integerValue]; }else if([myOperator isEqualToString:@“*”])){ 结果=[numberOne integerValue]*[numberTwo integerValue]; }else if([myOperator isEqualToString:@”/“])){ 结果=[numberOne integerValue]/[numberTwo integerValue]; }否则{ 结果=[numberOne integerValue]][numberTwo integerValue]; } 返回结果; } -(长)后缀:(NSMutableArray*)符号 { NSMutableArray*newSymbols=[[NSMutableArray alloc]init]; NSString*运算符SIGNS=@“*/%”; 长结果=0; 对于(int i=0;i

Ios EXC_算术错误目标C #导入“Calculator.h” @实现计算器 -(长)计算编号:(NSString*)我的运算符和numberOne:(NSString*)numberOne和NUMBERWO:(NSString*)NUMBERWO{ 长期结果; if([myOperator isEqualToString:@“+”])){ 结果=[numberOne integerValue]+[numberTwo integerValue]; }else if([myOperator isEqualToString:@“-”]){ 结果=[numberOne integerValue]-[numberTwo integerValue]; }else if([myOperator isEqualToString:@“*”])){ 结果=[numberOne integerValue]*[numberTwo integerValue]; }else if([myOperator isEqualToString:@”/“])){ 结果=[numberOne integerValue]/[numberTwo integerValue]; }否则{ 结果=[numberOne integerValue]][numberTwo integerValue]; } 返回结果; } -(长)后缀:(NSMutableArray*)符号 { NSMutableArray*newSymbols=[[NSMutableArray alloc]init]; NSString*运算符SIGNS=@“*/%”; 长结果=0; 对于(int i=0;i,ios,objective-c,xcode8,Ios,Objective C,Xcode8,这是我的课。我正在尝试在命令行中运行RPN计算器。但在calcNumbers方法中,存在EXC_算术错误。我认为asterisk是(全部)unix_命令。我怎样才能解决这个问题?提前感谢我不认为你现在在postFix中所做的是正确的,我甚至不知道你想做什么 发生崩溃的原因是您向calcNumbers发送了错误的值。我所说的坏值是指按意外顺序排列的值 例如,如果myOperator为@“10”且numberTwo为*,则您将输入else分支: #import "Calculator.h" @im

这是我的课。我正在尝试在命令行中运行RPN计算器。但在calcNumbers方法中,存在EXC_算术错误。我认为asterisk是(全部)unix_命令。我怎样才能解决这个问题?提前感谢

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

发生崩溃的原因是您向
calcNumbers
发送了错误的值。我所说的坏值是指按意外顺序排列的值

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

#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
你将除以(计算模),这将导致崩溃(你不能除以零)

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


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

我认为您现在在
postFix
中所做的操作不正确,我甚至不知道您正在尝试做什么

发生崩溃的原因是您向
calcNumbers
发送了错误的值。我所说的坏值是指按意外顺序排列的值

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

#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
你将除以(计算模),这将导致崩溃(你不能除以零)

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


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

该错误可能意味着您正在被零除(
/
%
运算符)。您必须解决该问题。请为
后缀
函数添加输入。该错误可能意味着您正在除以零(
/
%
运算符)。你必须解决这个问题。请为
postFix
函数添加输入。
NSLog(@"Operator %@, operands: %@, %@", myOperator, numberOne, numberTwo);