2014-11-17 4 views
0

여기에 약간의 문제가 있습니다. 재귀를 사용하여 사용자가 입력 한 문자열을 뒤집으려고하지만 오류가 계속 발생합니다. 기본적으로 매개 변수없는 void, 재귀 함수를 호출하여 문자열을 역순으로 출력해야합니다. "ReursalReversal 유형의 메소드 reverse()는 인수 (문자열)에 적용 할 수 없습니다"라는 반전 단어 아래의 23 행에서만 오류가 발생합니다. 이클립스에서 제공되는 빠른 픽스가 있지만, 필자가 필요로하는 것은 없다. 내가 놓친 게 있니?재귀를 사용하여 문자열 반전

import java.util.Scanner; 

public class RecursionReversal 
{ 
    public static String origChars; 

    public static void main(String[] args) 
    { 

     Scanner input = new Scanner(System.in); 

     System.out.println("Please enter 5 characters:"); 
     origChars= input.nextLine();   

     reverse(); 
    } 

    public static void reverse() 
    { 
     if(origChars.length() <= 1) 
      return; 
     else 
      reverse(origChars.substring(1) + origChars.charAt(0)); 
    } 
} 
+1

그 오류가 무엇인지 알고 좋을 것이다. – August

+0

@August error added – evarias

답변

1

귀하의 방법은 String 인수를하는 메소드 내에서 이루어지고; static 필드를 사용하면 작동 할 수는 있지만 잘못된 코드 냄새가 있습니다. 어쨌든 입력의 마지막 문자 인 String을 취한 다음 다른 모든 부분 문자열을 작성하십시오. 마찬가지로, 당신은 정의되지 않은

private static String origChars; 
public static void reverse() { 
    if (origChars.length() <= 1) 
     System.out.print(origChars); 
    else { 
     System.out.print(origChars.charAt(origChars.length() - 1)); 
     origChars = origChars.substring(0, origChars.length() - 1); 
     reverse(); 
    } 
} 
+0

그게 내가 가진 것이고, 매개 변수없는 void 함수를 사용해야한다는 것을 깨달았습니다. – evarias

+0

@evarias 내 두 번째 버전을 살펴보면, 그 외의 버전이'origChars'를 업데이트해야한다는 것을 알아 두십시오; 와'reverse()'는 인수를 취할 수 없습니다. –

+0

그것은 작동하지만 재귀에 대해서는 역 함수 내부에 인수가 필요하다고 생각했습니다. – evarias

2

메서드 호출에 해당하는 reverse 방법에 대한 인수를 추가

public static void reverse(String input) 
+0

그는 매개 변수가없는 함수를 말했습니다 ... – user2226786

0

처럼 전역으로 작업을 수행해야하는 경우

public static String reverse(String str) { 
    if (str.length() <= 1) 
     return str; 
    else 
     return Character.toString(str.charAt(str.length() - 1)) 
       + reverse(str.substring(0, str.length() - 1)); 
} 

, 그것은 비슷한 함께 할 수 있지만 (인수없이) reverse()를 호출하기 전에 당신은 origChars를 업데이트해야합니다 매개 변수 또는 역방향 함수의 반환 유형 재귀를 사용하려면 난 당신이 reverse(s.substring(1) + s.charAt(0)); 문을 올바른 생각을 가지고 있지만, 그렇지 않으면 당신은 결과를 얻을 수있는 방법이 없습니다 반환 유형을 필요

public static String reverse(String s) 
{ 
    if(s.length() <= 1) 
     return s; 
    else 
     reverse(s.substring(1) + s.charAt(0)); 
} 

과 역방향 방법을 대체 추천 할 것입니다. 둘째 매개 변수없이이 메서드는 String의 어떤 부분을 뒤집을 지 알 수 없습니다.

마지막으로 작동하려면 main에서 reverse(); 대신 origichars = reverse(origChars);으로 전화하십시오.

+0

그래, 그 부분을 이해하지만 매개 변수없는 void 함수를 사용하여이 작업을 수행하는 방법을 찾으려고했습니다. – evarias

+0

방금 ​​매개 변수없는 void 함수를 사용하여 대답을 추가했습니다. – ave4224

0

매개 변수없는 void 함수로이를 수행하는 방법이 있습니다. reverse()은 처음으로 char을 제거하고 reverse()을 호출 한 다음 char을 다시 origChars 끝에 넣습니다.

public static void reverse() 
{ 
    if(origChars.length() <= 1) 
     return; 
    char first = origChars.charAt(0); 
    origChars = origChars.substring(1); 
    reverse(); 
    origChars+=first; 
} 
0

이 시도 :

public String reverseUsingRecursion(String str){ 
    if(str.length() == 0 || str.length() == 1){ 
     return str; 
    } 
    String reverseString = reverseUsingRecursion(str.substring(1)) 
          + str.charAt(0); 
    return reverseString;   
}