2009-12-08 8 views
0

J'ai déjà écrit quelque chose qui supprime le premier caractère d'une chaîne et le met après la sous-chaîne restante, puis l'imprime, les instructions étaient d'inverser la phrase en utilisant la récursivité en supprimant la première lettre de la phrase et la concaténer à la sous-chaîne restante inversée, à savoir. "Bonjour" donne "olleH". Mais je ne connais pas la partie récursive, toute aide serait appréciée, merci. Ceci est mon code:Aider à écrire une méthode void reverse() et utiliser récursion pour inverser une phrase complète (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

Faut-il vraiment être vide? : o) – BalusC

+0

Faut-il vraiment être résolu avec récursion? : o) –

Répondre

0

Comprenez-vous le concept de récursion? Si oui, déterminez le cas de base (la condition qui arrêterait la récursion) et ce que vous voulez faire dans chaque étape récursive. Astuce: vous aurez besoin d'une méthode récursive qui inverse la chaîne et retourne la chaîne inversée. Je ne vais pas vous répondre directement, mais cela devrait vous aider à démarrer.

EDIT: (Encore une indication) n'essaie pas de rendre la méthode void reverse() récursive. Appelez une autre méthode récursive privée qui fait l'inversion.

1

Voyant que cela est un devoir, je vais vous donner quelques conseils pour commencer:

  • une méthode récursive elle-même appelle à faire partie du travail
  • une méthode reverse() prenant un argument String et retournant la version inversée de la chaîne pourrait s'appeler.
  • Si vous supprimez le premier caractère et l'ajoutez à la fin du reste inversé, votre travail est terminé.

Si vous travaillez les conseils ci-dessus, vous devriez avoir résolu votre problème :-)

1

Généralement, si vous voulez écrire une fonction récursive, vous appelerez la fonction en elle-même. Par exemple:

void fn() { 
    fn() 
} 

Cet exemple sera évidemment une boucle infinie.

Dans votre cas, vous voulez appeler la fonction inverse plusieurs fois jusqu'à ce que vous atteigniez un état défini (où Hello est transformé en 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 
    } 
} 

Je suppose que cela est une question de devoirs et il est pour bientôt, donc je ne vais pas donner une réponse exacte ...

Mise à jour 1: Je l'exemple inverse modifié pour correspondre à la contraintes qui ont été exprimées.

+0

oui ... je sais cela, mais je ne peux pas appeler la méthode inverse en elle-même car elle dit qu'elle n'est pas définie pour le type String:/... et j'utiliserais une autre méthode comme public String reverse (String args), mais l'instructeur ne le veut pas, elle veut une méthode void reverse() ... –

+0

Cela signifie que vous développez autour d'une contrainte de conception - un problème CS classique. Mon exemple original est toujours présent, sauf que vous appelez reverse() au lieu de reverse (modifiedString). Au lieu de transmettre une chaîne mise à jour (modifiedString) dans votre méthode, votre professeur veut que vous changiez la variable d'instance définie comme 'phrase' – rynmrtn

+0

Ensuite, créez 2 méthodes. Un 'public void reverse()' et un 'private String reverse (String s)'.Le «vide» exécute évidemment l'autre non-nul. – 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; 
    } 
}