2012-02-13 3 views
0

아래는 항상 null을 반환하는 클래스 메서드입니다. 예를 들어 stack = 2,2, "+" "2 + 2"를 반환하려고합니다.CS193P - 할당 2, descriptionOfTopOfStack :, 재귀 클래스 메서드

초기 반복에서

는 방법은 제대로 topOfStack 오히려의 NSNumber보다있는 NSString입니다 결정하지만, 내가 모르는 뭔가가있어 기분이 재귀

를 호출하여 "2 + 2"와 동일 할 수는 NSString '설명'을 만들지 않습니다이다 여기 분명히, 나는 문자열을 올바르게 다루고있다 ....

+ (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

메서드 stringByAppendingString:은 자동 반복 된 문자열을 반환하고 원래의 문자열을 수정하지 않습니다. 수정할 경우 description 당신은 단지 NSString 아닌 NSString에 대한 포인터를 만드는

NSString *description; 

작성, 게다가

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

같은 것을해야합니다. 대신 사용

NSString* description = @""; 
+0

옙, 그것은 고마운 일을 처리합니다 – John67

+0

나는 변하지 않는 문자열을 변경하려고합니다. 도! – John67