我有一个将数组作为引用传递的方法,我使用递归多次调用此方法。我将数组用作“堆栈”。该代码用于将后缀转换为中缀的计算器,并且只是一个简单的工具。
我对代码及其输出有疑问。该代码有效,但是当我取消注释其中一个部分[stack removeLastObject];
时,它停止工作并声称该数组为空。
我没有得到这个,因为我正在从主数组中删除一个对象——而不是我在递归中使用的副本。如果我输入一个用于递归的副本,然后从原始对象中删除一个对象,该副本是否会受到影响?
我的主要示例是使用应输出 (3 + 5) 的 3、5、+ 数组。如果我取消注释我得到的一段代码(3+3)。这是代码:
+(NSString*) descriptionTop:(NSMutableArray *) stack{
NSMutableString *programFragment = [NSMutableString stringWithString:@""];
id topOfStack = [stack lastObject];
if (topOfStack) [stack removeLastObject];
NSLog(@"operation is %@", topOfStack);
NSLog(@"Stack is%@", stack);
if([ topOfStack isKindOfClass:[NSNumber class]]){
[programFragment appendFormat:@"%g", [topOfStack doubleValue]];
}
else if( [topOfStack isKindOfClass:[NSString class]])
{
NSString *operation = topOfStack;
if ([operation isEqualToString:@"+"] ||
[operation isEqualToString:@"-"] ||
[operation isEqualToString:@"/"] ||
[operation isEqualToString:@"*"]) {
NSMutableArray *operand1 = [stack mutableCopy];
[operand1 removeLastObject];
NSMutableArray *operand2 = [stack mutableCopy];
// [stack removeLastObject];
[programFragment appendFormat:@"(%@ %@ %@)", [self descriptionTop:operand1], operation, [self descriptionTop:operand2]];
}
}
NSLog(@" program fragment returns %@", programFragment);
return programFragment;
}