2011-03-31 5 views
0

문자열 생성기의 모든 "F"를 문자열 생성기 (재귀 사용)로 바꾸는 방법을 작성해야합니다. 여기에서 내 샷, 그러나 제대로 작동하지 않는 것 :재귀를 사용하여 한 문자열의 다른 부분을 다른 문자열로 바꾸기 (Java)

public String nextGeneration(String initiator, String generator) 
{ 
    String result2 = ""; 
    if (initiator=="F") 
    { 
     result2 = generator; 
    } 
    else 
    { 
     if (initiator.substring(0,0)=="F") 
     { 
      result2 = generator + nextGeneration(initiator.substring(1,initiator.length()), generator); 
     } 
     else if (initiator.substring(0,0)=="+") 
     { 
      result2 = "+" + nextGeneration(initiator.substring(1,initiator.length()), generator); 
     } 
     else if (initiator.substring(0,0)=="-") 
     { 
      result2 = "-" + nextGeneration(initiator.substring(1,initiator.length()), generator); 
     } 
    } 
    return result2; 
} 

어떤 제안?

+0

"어떤 제안?" 1) 애매한 것을 제공하는 것이 아니라, "잘 작동하지 않는 것 같습니다."2) 더 빨리 도움을 받으려면 [SSCCE] (http : /pscode.org/sscce.html). –

답변

2

문자열 비교에 ==을 사용하지 마십시오. string1.equals(string2)을 사용하십시오.

string1 == string2 두 참조가 문자열 내용 값이 같은 경우가 아니라 메모리의 같은 개체를 참조하는지 테스트합니다.

1

당신이 설명하지 않은 반응을 보이는 다른 문자가있어 귀하의 질문에 정보가 누락되었습니다.

코드가 작동하는 방법을 확인하기 위해 코드를 가지고 놀고 있었는데 코드에 문제가 있다는 것을 initiator.length() == 0 비트를 추가하면 알았습니다.

다른 시도를하는 데 도움이 될 수 있으므로 여기에서 시도해 보겠습니다.하지만 올바르지 않습니다.

재귀 프로그램에서는 연필/종이로 무엇이 발생하는지 살펴 보는 것이 도움이되지만 기본적으로 첫 번째 if 문은 반복자가 "F"이 아니기 때문에 찾고자하는 문법에 결함이 있습니다. 당신이 원하지만, 만약이 세 문자 중 하나가 아니라면, 아마도 당신이 원하지 않는 일찍 빠져 나올 것입니다.

예를 들어 살펴보고 발생할 것으로 예상되는 것을 적어보고 논리를 확인한 다음 결과를보고 문제가 무엇이 잘못되었는지 분석하십시오.

하지만 직접 시도한 다음 디버거를 사용하여 프로그램을 수정하는 방법을 결정할 수 있는지 확인하십시오.

public String nextGeneration(String initiator, String generator) 
{ 
    String result2 = ""; 
    if (initiator.length() == 0) { 
     return initiator; // This is where I realized you have a problem, I couldn't see what should be returned here. 
    } 
    char f = initiator.charAt(0); 
    switch(f) { 
     case 'F': 
      result2 = generator + nextGeneration(initiator.substring(1,initiator.length()), generator); 
     break; 
     case '+': 
      result2 = "+" + nextGeneration(initiator.substring(1,initiator.length()), generator); 
      break; 
      case '-': 
      result2 = "-" + nextGeneration(initiator.substring(1,initiator.length()), generator); 
      break; 
      default: 
      break; 
     } 
    return result2; 
} 
0
public static String nextGeneration(String initiator, String generator){ 
    StringBuffer result = new StringBuffer(); 
    if(initiator.length() > 0){ 
     char letter = initiator.charAt(0); 
     if(letter == 'F') 
      result.append(generator); 
     else 
      result.append(letter); 
     result.append(nextGeneration(initiator.substring(1),generator)); 
    } 
    return result.toString(); 
} 
관련 문제