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