Ayudar con la escritura de un vacío inversa () método y uso de la recursividad para revertir una oración completa (Java)
Pregunta
Ya he escrito algo que quita el primer carácter de una cadena y la coloca después de la subcadena restante y luego lo imprime, las instrucciones eran para revertir la sentencia utilizando la recursividad mediante la eliminación de la primera letra de la oración y concatenar a la invertido subcadena restante, es decir. "Hola" produce "Olleh". Pero no sé acerca de la recursividad parte, cualquier ayuda se agradece, gracias. Este es mi código:
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);
}
}
Solución
¿Comprende el concepto de recursividad? Si es así, averiguar el caso base (la condición de que se detendría la recursividad) y lo que quiere hacer en cada paso recursivo. Sugerencia: se necesita un método recursivo que toma la cadena que se invierta y devuelve la cadena inversa. No va a responder a una pregunta directamente hacia arriba HW, pero que debería empezar.
EDIT: (Una pista más) no trate de hacer el vacío inversa () método recursivo. Tiene que llamar a un método recursivo diferente, privada que realmente hace la marcha atrás.
Otros consejos
Al ver que se trata de una tarea, voy a dar algunos consejos para empezar:
- un método recursivo llama a sí mismo a hacer parte de la obra
- un método
reverse()
teniendo un argumentoString
y devolver la versión invertida de la cadena podría llamarse a sí misma. - si se quita el primer carácter y la agrega al final de la invertida de izquierda más, su trabajo está hecho.
Si se trabaja a cabo los consejos anteriores, que debería haber resuelto su problema: -)
En general, si desea escribir una función recursiva, se le llama a la función en sí misma. Por ejemplo:
void fn() {
fn()
}
En este ejemplo, obviamente, será un bucle infinito.
En su caso, usted quiere llamar a su función de marcha atrás varias veces hasta que se llega a un estado definido (donde se transforma Hola 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
}
}
Asumo que esto es una pregunta tarea y que es debido pronto, así que no voy a dar una respuesta exacta ...
Actualización 1 : I modificado el ejemplo inverso para que coincida con las limitaciones que se expresan
.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;
}
}