2009-12-08 3 views
0

문자열의 첫 번째 문자를 제거하고 나머지 하위 문자열 뒤에 넣은 다음 명령을 인쇄하는 방법을 이미 작성했습니다. 문장의 첫 글자를 지우고 재귀를 사용하여 문장을 뒤집어서 그것을 역순으로 남은 부분 문자열 즉, 그것을 연결하는 것이었다. "안녕하세요"는 "olleH"를 산출합니다. 하지만 재귀 부분에 대해서는 잘 모릅니다. 감사합니다. 감사합니다. 감사합니다. 이건 내 코드입니다 :void reverse() 메서드를 작성하고 재귀를 사용하여 완전한 문장을 역순으로 처리하는 방법 (Java)

public class Sentence { 

    private String sentence; 

    public Sentence(String astring) { 
     sentence = astring; 
    } 

    public void reverse(){ 

    String firstChar = sentence.substring(0,1); 

    String remainingSen = sentence.substring(1,sentence.length()); 

    System.out.println(remainingSen+firstChar); 
    } 
} 
+1

실제로 무효화해야합니까? : o) – BalusC

+0

정말 재귀를 통해 해결해야합니까? : o) –

답변

0

:-) 문제를 해결해야합니까? 그렇다면 기본 케이스 (재귀를 중지시키는 조건)와 각 재귀 단계에서 수행하려는 작업을 파악하십시오. 힌트 : 문자열을 반대로하고 역 문자열을 반환하는 재귀 적 메서드가 필요합니다. 직접 HW 질문에 대답하지는 않겠지 만 시작해야합니다.

EDIT : (한 번 더 힌트) void reverse() 메서드를 재귀 적으로 만들지 마십시오. 실제로 역전을 수행하는 다른 개인 재귀 적 메서드를 호출해야합니다.

1

이 숙제는 것을보고, 나는 시작하는 몇 가지 힌트를 줄 것이다 :

  • 재귀 방법은 작업의 일부를 수행하는 자신을 호출을
  • reverse() 메서드는 String 인수를 사용하고 문자열의 반대 버전을 반환하면 자체를 호출 할 수 있습니다.
  • 첫 번째 문자를 제거하고 뒤집힌 왼쪽 끝 부분에 추가하면 작업이 완료됩니다. 위의 힌트를 작업하는 경우

, 당신은 재귀의 개념을 이해 하는가

1

일반적으로 재귀 함수를 작성하려면 함수 자체를 호출해야합니다. 예 :

void fn() { 
    fn() 
} 

이 예제는 분명히 무한 루프입니다.

경우에 따라 정의 된 상태 (Hello가 olleH로 변환 됨)에 도달 할 때까지 역순 함수를 반복적으로 호출하려고합니다. 나는 가정

public class Sentence { 

    private String sentence; 

    // ... etc ... 

    public void reverse() { 
     // Base Case: When do you want this to end? This statement is designed 
     // to end the recursion when a desired state is reached 

     // some sort of string manipulation (which you have already worked on) 

     // call reverse() to continue the 'looping' until 
     // a desired _case_ is reached 
    } 
} 

이 숙제 질문하고 곧 때문에, 그래서 나는 ...

업데이트 1를 정확한 답을 제공하지 않을거야 : 나는 일치하도록 역 변형 예 표현 된 제약 조건.

+0

예 ... 알아요,하지만 그 자체가 내부에 역방향 메서드를 호출 할 수 없기 때문에 문자열 형식에 대한 정의되지 않았습니다 :/... 그리고 나는 다른 방법을 사용하는 공공 문자열 역방향 (문자열 args), 강사가 이것을 원하지 않는다면, 그녀는 void reverse() 메소드를 원합니다 ... –

+0

이것은 당신이 고전적인 CS 문제인 디자인 제약 조건을 중심으로 개발한다는 것을 의미합니다. reverse() 대신 reverse()를 호출한다는 것을 제외하고는 원래의 예제가 그대로 남아 있습니다. 메소드에 업데이트 된 문자열 (modifiedString)을 전달하는 대신, 교수님은'문장 '으로 정의 된 인스턴스 변수를 변경하길 원합니다. – rynmrtn

+0

그런 다음 두 가지 메소드를 생성하십시오. 'public void reverse()'와'private String reverse (String s)'입니다.'void '는 분명히 non-void other를 실행합니다. – BalusC

0
public void reverse() 
{ 
    if(text.length() > 0) 
    { 
     String first = text.substring(0,1); 
     String remaining = text.substring(1); 

     Sentence shorter = new Sentence(remaining); 
     shorter.reverse(); 

     text = shorter.text + first; 
    } 
} 
관련 문제