Programación recursiva de palabra más larga

Finalmente lo hice como lo que quiero. Gracias a todos por ayudar y quiero enfatizar que NO fue tarea.

public static void main(String[] args) {
    String input = "Java is a programming language";
            StringTokenizer st = new StringTokenizer(input);
    System.out.print(longestWord(input));

}

public static String longestWord(StringTokenizer st) {
    if (!st.hasMoreTokens()) {
        return "";

    } else {
        String token = st.nextToken(); 
        String longestInTheRest = longestWord(st);
        if (token.length() > longestInTheRest.length()) { 

            return token;

        } else {
            return longestInTheRest;
        }
Respuesta 1

Lo siguiente no es del todo correcto:

else if (token.length() > result.length()) {

Cuando se ejecuta la declaración anterior, resultes siempre " ".

Lo que debe hacer la función es devolver el mayor de: (1) la longitud de token; (2) la longitud de la palabra devuelta por la llamada recursiva.

También puede pensar si las dos s.substring()llamadas hacen exactamente lo que desea o si puede haber un problema. Imprimir tokeny rest(o examinarlos en un depurador) puede ser útil.

Como esto parece tarea, me detendré aquí.

Respuesta: 2

Está comparando la palabra actual con el resultado, pero el resultado es una variable local que siempre se establece en " "(que, por cierto, no es la cadena vacía, sino una cadena que contiene un espacio en blanco).

Debe pasar el resultado actual como argumento al método, y comenzar con una cadena vacía como resultado.

También tiene un error porque no recorta sus tokens y, por lo tanto, considera el espacio en blanco principal como parte de la palabra.

Respuesta: 3

Para que la recursividad funcione, debe pasar un estado actual, la palabra más larga actual para comparar.

Si parece una tarea, entonces no incluyo la respuesta, por favor avíseme si no fue así.

Respuesta: 4
    result = token;
    return longestWord(rest);

Esta es la parte equivocada. result guarda el token, pero luego sale del método, lo ingresa nuevamente y establece el resultado en "". Agregue otro parámetro String currentLongest a la firma de métodos para que no se pierda.

Respuesta: 5

Debe probar si queda espacio.

Algo como

int index = s.indexOf(' ');
if (index < 0) return s;
Respuesta: 6

Necesito personalizar la implementación de mi portlet liferay para que los archivos GWT nocache.js no obtengan un conjunto de encabezado HTTP 'Expires'. Mi archivo de guerra se ve así: view.jsp com.foobar.MyEntryPoint / com ....

Quiero rastrear getVariableAndLogAccess (RequestInfo requestInfo) usando el código a continuación. ¿Será seguro para subprocesos si solo estos dos métodos acceden a la variable? ¿Cuál es la forma estándar de hacer que sea seguro para subprocesos? ...

Mi programa Java realiza extracción de texto en archivos RTF utilizando RTFEditorKit. Algunos de los archivos RTF contienen caracteres cirílicos (ruso) y, según la versión RTF, el texto extraído es ...

Estoy revisando las diferencias entre Struts1 y Strust2, descubrí que, un problema común en Struts 1 es programar en clases abstractas en lugar de interfaces. ¿Alguien podría dejarme ...