2010-01-28 5 views
1

자바 초보자가 도움을 찾고 있습니다. 재귀 Java 프로그램의 새로운 객체 생성

public void generateCodeTable(Node tree, StringBuffer buf) { 
     if (tree != null) { 
      StringBuffer newSB = new StringBuffer(); 
      newSB.append(buf); 
      if (tree.key != '$') { 
       System.out.print(tree.key + "(" + buf + ") "); 
      } else { 
       System.out.print(tree.key + "(" + buf + ") "); 
      } 
      generateCodeTable(tree.getLeftNode(), newSB.append(1)); 
      generateCodeTable(tree.getRightNode(), newSB.append(0)); 
     } 

이 지속적 내가 할 수 있도록하고 싶습니다 정말로 재귀 루프의 각 반복에서 동일한의 StringBuffer에 추가됩니다 무엇 그것이 브랜드를 만들 수 있습니다

: 여기에 문제의 코드는 - 새로운 StringBuffer. 새로운 StringBuffer를 강제적으로 생성하는 방법은 없습니까?

그 의미가 되길 바랍니다. 내가 분명히 할 수있는 곳을 알려줘. 고맙습니다! :)

+0

같은 StringBuffer를 사용한다고 생각하게 만드는 이유는 무엇입니까? 재귀의 각 쌍은 새 데이터를 추가하는 것이지만 이전 데이터를 새 데이터에 추가합니다. –

+2

나는 혼란스러워. 함수가 반복 될 때마다 새 StringBuffer를 만드는 것처럼 보입니다. (온라인 3). 어쩌면 당신이 성취하고자하는 것을 묘사하는 것이 더 합리적 일 것입니다. – kenj0418

답변

3

당신은 매번 새로운 StringBuffer를을 만드는 :

StringBuffer newSB = new StringBuffer(); 

하지만 당신은 다음 줄에 StringBuffer를 전달의 내용을 추가하고, 그래서 당신은 같은를 사용하는 것 같습니다 StringBuffer를 할 때마다,하지만 당신은 아니야 :

newSB.append(buf); 

어쩌면 당신이 원하는 게 아니에요? 디버거를 사용하여이 단계를 수행하십시오.

1

당신이 무엇을하려고하는지 더 잘 설명해 주시겠습니까?

이 코드 섹션은 특히 혼란 스럽습니다.

 if (tree.key != '$') { 
      System.out.print(tree.key + "(" + buf + ") "); 
     } else { 
      System.out.print(tree.key + "(" + buf + ") "); 
     } 
당신은 상관없이 경로 IF가 ELSE 소요 /의, 같은 일을 인쇄하는 것, 왜 조건 부분이있다

? 또한

, 당신은 다음 작업을 수행 할 때 :

당신은 정말 새로운 StringBuffer를 객체를 생성하는
StringBuffer newSB = new StringBuffer(); 
newSB.append(buf); 

,이 기능에 로컬로 범위. 그러나 매개 변수 buf의 내용을 새 StringBuffer에 추가하고 있습니다. 함수의 모든 반복에서 동일한 StringBuffer에 추가한다는 환상을 줄 수 있지만 실제로는 매번 새로운 것을 생성하고 있습니다.

문제를 좀더 명확히 할 수 있다면 우리가 도울 수 있다고 생각합니다.