我有一個方法將一個數組作爲參考傳遞,我使用遞歸來多次調用這個方法。我使用數組作爲「堆棧」。該代碼是一個計算器,將後綴轉換爲中綴,只是一個簡單的工具。Objective C:將NSArray作爲參考傳遞給方法
我有一個關於代碼和它的輸出的問題。該代碼的作品,但當我取消註釋一個部分[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;
}
複製的行爲獨立於源。所以,答案應該是No. – rshahriar 2012-07-16 06:38:50