2011-02-05 2 views
0

У меня есть рекурсивный метод, который перевернул строку (назначение HW, должно быть рекурсивным). Я сделал это ... но его единственное возвращение значения строки после первого прохода. Анализируя результат после каждого прохода, я вижу, что он правильно выполняет свою работу. Heres мой код, и на выходе я получаю под ним:Почему это не возвращает новую строку?

String s = "Hello, I love you wont you tell me your name?"; 
int k=0; 
public String reverseThisString(String s) { 
    if(k!=s.length()) { 
     String first =s.substring(0,k)+s.charAt(s.length()-1); 
     String end = ""+s.substring(k, s.length()-1); 
     k++; 
     s=first+end; 
     System.out.println(s); 
     this.reverseThisString(s); 
    } 
    return s; 
} 

выход:

?Hello, I love you wont you tell me your name 
+0

это домашнее задание, так как трудно изменить строку в этом плохого? – bestsss

ответ

3

Я думаю, что вам нужно изменить:

this.reverseThisString(s); 

к этому:

return this.reverseThisString(s); 

В противном случае результатом вызова метода является simp отброшен.

Я также рекомендовал бы, чтобы вы изменили k на параметр, а не на элемент.

+0

и пометили меня до удара, когда я снова помечал. поэтому вместо публикации я просто скажу - что он сказал – zellio

+0

imo, отвечать на домашнее задание нехорошо – bestsss

+0

@bestsss: Кажется, он приложил разумные усилия, чтобы самому сделать работу, ИМХО. Это не просто «дать мне кодз» - у него почти рабочее решение. –

0

Как сказал Марк, вы забыли заявление о возврате.

Кроме того, есть более простой способ изменить строку (что мой текущий домашнее задание тоже: P)

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