Aiuto con la scrittura di un vuoto inversa () e utilizzare la ricorsione per invertire una frase completa (Java)

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

  •  18-09-2019
  •  | 
  •  

Domanda

ho già scritto qualcosa che rimuove il primo carattere di una stringa e la mette dopo la stringa rimanente e poi lo stampa fuori, le istruzioni erano di invertire la frase utilizzando la ricorsione rimuovendo la prima lettera della frase e concatenare al invertito stringa rimanente, vale a dire. "Ciao" produce "olleh". Ma io non so circa la parte ricorsione, qualsiasi aiuto sarebbe apprezzato, grazie. Questo è il mio codice:

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);  
  }
}
È stato utile?

Soluzione

Avete capito il concetto di ricorsione? Se è così, capire il caso base (la condizione che avrebbe fermare la ricorsione) e ciò che si vuole fare in ogni fase ricorsiva. Suggerimento: avrete bisogno di un metodo ricorsivo che prende la stringa essere invertita e restituisce la stringa invertita. Non andare a rispondere verso l'alto una domanda HW, ma che dovrebbe iniziare.

EDIT: (Un altro suggerimento) non cercare di rendere il metodo vuoto inversa () ricorsivo. Averlo chiamare un diverso, metodo ricorsivo privato che in realtà la retromarcia.

Altri suggerimenti

Visto che si tratta di un compito a casa, darò alcuni suggerimenti per iniziare:

  • un metodo iterativo si chiama a fare parte del lavoro
  • un metodo reverse() prendendo un argomento String e restituendo la versione invertita della stringa potrebbe dirsi.
  • se si rimuove il primo carattere e aggiungerlo alla fine del invertita sinistra sopra, il vostro lavoro è fatto.

Se si lavora fuori i suggerimenti di cui sopra, si dovrebbe avere risolto il problema: -)

In generale, se si vuole scrivere una funzione ricorsiva, sarete chiamare la funzione in sé. Ad esempio:

void fn() {
    fn() 
}

Questo esempio sarà ovviamente un ciclo infinito.

Nel tuo caso, si desidera chiamare la funzione inversa più volte fino a raggiungere uno stato definito (in cui si trasforma Ciao a 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
  }
}

Presumo che ciò è una questione compiti a casa ed è dovuto presto, quindi non ho intenzione di dare una risposta precisa ...

Aggiorna 1 : ho modificato l'esempio inverso per abbinare i vincoli che sono stati espressi

.
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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top