Aide à l'écriture d'une méthode inverse vide () et récursion utilisation pour inverser une phrase complète (Java)

StackOverflow https://stackoverflow.com/questions/1869434

  •  18-09-2019
  •  | 
  •  

Question

Je l'ai déjà écrit quelque chose qui enlève le premier caractère d'une chaîne et met après la sous-chaîne restante puis imprime dehors, les instructions devaient inverser la phrase en utilisant récursion en supprimant la première lettre de la phrase et concaténer à la inversé restant sous-chaîne, à savoir. « Bonjour » donne « olleH ». Mais je ne sais pas à propos de la partie récursion, toute aide serait appréciée, merci. Ceci est mon code:

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);  
  }
}
Était-ce utile?

La solution

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

EDIT: (Encore une astuce) ne pas essayer de faire la méthode inverse vide () récursive. Avez-il appeler une méthode récursive différente, privée qui ne fait la marche arrière.

Autres conseils

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 en retournant la version inversée de la chaîne pourrait appeler lui-même.
  • si vous supprimez le premier caractère et l'ajouter à la fin de l'inversion reste, votre travail est fait.

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

En général, si vous voulez écrire une fonction récursive, vous serez en appelant la fonction en elle-même. Par exemple:

void fn() {
    fn() 
}

Cet exemple sera évidemment une boucle infinie.

Dans votre cas, vous voulez appeler votre fonction inverse jusqu'à ce que vous atteignez un état défini (où Bonjour 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'ai modifié l'exemple inverse pour répondre aux contraintes qui ont été exprimées

.
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;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top