CS193P - Задание 2, descriptionOfTopOfStack :, рекурсивный метод класса - PullRequest
0 голосов
/ 14 февраля 2012

ниже - это метод класса, который всегда возвращает нуль-например, когда stack = 2,2, "+" Я хочу, чтобы он возвращал "2 + 2"

На начальной итерации метод правильно определяет, что topOfStack является NSString, а не NSNumber, но не создает NSString 'description', равное "2 + 2", путем рекурсивного вызова

Я чувствую, что упускаю что-то очевидное здесь, правильно ли я разбираюсь со строками ...

+ (NSString *) descriptionOfTopOfStack: (NSMutableArray * ) stack
{
   NSString *description;

id topOfStack = [stack lastObject]; // get last object
if (topOfStack) [stack removeLastObject]; // then remove it from stack

if ([topOfStack isKindOfClass:[NSNumber class]]) { // is last object a number?
    return [topOfStack stringValue]; // if so then return it, **done*** 
}
else if ([topOfStack isKindOfClass:[NSString class]]) 
{      
    if ([topOfStack isEqualToString:@"+"])
          {
                 [description stringByAppendingString: [self descriptionOfTopOfStack:stack]];
                 [description stringByAppendingString:@"+"];
                 [description stringByAppendingString: [self descriptionOfTopOfStack:stack]];
          }


   }

   NSLog(@"Description is %@", description);

return description;
}

1 Ответ

1 голос
/ 14 февраля 2012

Метод stringByAppendingString: возвращает автоматически выпущенную строку, не изменяет исходную строку. Если вы хотите изменить description, вы должны сделать что-то вроде

description = [description stringByAppendingString: [self descriptionOfTopOfStack:stack]];

Кроме того, написание

NSString *description;

вы просто создаете указатель на NSString, а не NSString. Используйте вместо

NSString* description = @"";
...