配列を参照として渡すメソッドがあり、再帰を使用してこのメソッドを数回呼び出します。配列を「スタック」として使用します。このコードは、接尾辞を中置辞に変換する電卓用であり、単なるツールです。
コードとその出力について質問があります。コードは機能しますが、1つのセクションのコメントを解除すると、機能が[stack removeLastObject];
停止し、配列が空であると主張します。
メイン配列からオブジェクトを削除しているため、これは取得できません。再帰で使用しているコピーではありません。再帰のためにコピーを入力してから、元のオブジェクトからオブジェクトを削除すると、コピーは影響を受けますか?
私の主な例は、(3 + 5)を出力する3、5、+の配列を使用することです。コードの1つのセクションのコメントを外すと、(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;
}