【发布时间】:2017-04-02 11:14:29
【问题描述】:
我正在尝试做一个控制台行计算器,但我的程序有问题。我调用一个方法(startParsing)并传递一个用户输入。我的方法在第一次迭代期间起作用(当 i=0 时),它将一个数字添加到我的数字属性(这是 @property (nonatomic, strong) NSMutableString *number; 在我的 .h 文件中)并向 NSMutableArray 添加一个运算符。因此,如果我传递 2+3+7,该方法会将“2”添加到数字属性,将“+”添加到运算符数组。然后第二次迭代开始,当这一行被称为 [self.number appendFormat:@"%c", symbol];出现错误: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“尝试使用 appendFormat 改变不可变对象:”。
您能帮我了解一下问题所在以及如何解决吗?
- (void)startParsing:(NSMutableString *)userInput {
int operatorCounter = 1;
for (int i = 0; i < [userInput length]; i++)
{
char symbol = (char) [userInput characterAtIndex:(NSUInteger) i];
if ([self isSymbolNumber:symbol])
{
[self.number appendFormat:@"%c", symbol];
operatorCounter = 0;
}
else
{
if ([self isOperatorSymbol:symbol])
{
//checks if the symbol is a unary operator.
if ((symbol == '-' || symbol == '+') && ([self isSymbolNumber:(char) [userInput characterAtIndex:(NSUInteger) i + 1]])
&& (operatorCounter == 1))
{
[self.number appendFormat:@"%c", symbol];
operatorCounter = 0;
}
else if (operatorCounter == 0)
{
[self convertNumberToIntAndAddToArray:self.number];
NSMutableString *singleCharacter = [NSMutableString stringWithFormat:@"%c", symbol];
[self.arrayOfOperators addObject:singleCharacter];
operatorCounter++;
}
else [self printErrorWith:@"Invalid input operatorCounter == 0 "];
}
else
{
[self printErrorWith:@"Invalid input operatorCounter == 0 below"];
}
}
}
【问题讨论】:
标签: objective-c