es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué algunas palabras no se verifican o se incluyen en la cadena de palabras invertidas?

Hola a todos. Tengo una tarea: invertir cada palabra en una frase siempre y cuando la palabra tenga 5 o más letras. El programa ha estado funcionando bien con la mayoría de las palabras, pero después de algunas, no se incluyen las palabras invertidas. ¿Alguien sabe por qué está sucediendo esto? Aquí está el código:

public static int wordCount(String str) {
    int count = 0;
    for(int i = 0; i < str.length(); i++) if(str.charAt(i) == ' ') count++;
    return count + 1;
}

public static String reverseString(String s) {
    Stack<character> stack = new Stack<>();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        stack.push(s.charAt(i));
    }
    while (!stack.empty()) {
        sb.append(stack.pop());
    }
    return sb.toString();
}

public static String spinWords(String sentence) {
    String ans = "";
    for(int i = 0; i <= wordCount(sentence); i++) {
        if(sentence.substring(0, sentence.indexOf(' ')).length() >= 5) {
            ans += reverseString(sentence.substring(0, sentence.indexOf(' '))) + " ";
            sentence = sentence.substring(sentence.indexOf(' ') + 1);
        } else {
            ans += sentence.substring(0, sentence.indexOf(' ')) + " ";
            sentence = sentence.substring(sentence.indexOf(' ') + 1);
        }
    }
    return ans;
}

public static void main(String[] args) {
    System.out.println(spinWords("Why, hello there!"));
    System.out.println(spinWords("The weather is mighty fine today!"));
}

El método wordCount es solo para contar las palabras. Utilizo el resultado en un bucle for posterior para iterar a través de todas las palabras.

El método reverseString invierte una sola cadena. Esto no es donde invierto ciertas palabras, esto es para invertir una cadena. “Tomado prestado” de https://stackoverflow.com/a/33458528/16818831.

Por último, la función real es spinWords. Acepta una cadena y devuelve la cadena con las palabras invertidas. Creo que mi error está aquí. Quiero saber por qué se omiten algunas palabras. Por si acaso, aquí está mi método main.

Favor de decirme por qué ocurre esto. ¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código proporcionado es que en el bucle for del método spinWords, la condición debería ser i < wordCount(sentence) en lugar de i <= wordCount(sentence). Esto se debe a que el número real de palabras en la oración es wordCount(sentence), pero la condición del bucle actualmente verifica una iteración más de las que hay palabras.

    Además, en la instrucción else, el código debería agregar la palabra a la cadena de respuesta con un carácter de espacio al final, como sigue: ans += sentence.substring(0, sentence.indexOf(' ')) + " ";. Esto se debe a que de lo contrario, las palabras consecutivas se ejecutarán juntas sin ningún espacio entre ellas.

    Aquí está el código corregido:

    public static String spinWords(String sentence) {
        String ans = "";
        for(int i = 0; i < wordCount(sentence); i++) {
            if(sentence.substring(0, sentence.indexOf(' ')).length() >= 5) {
                ans += reverseString(sentence.substring(0, sentence.indexOf(' '))) + " ";
                sentence = sentence.substring(sentence.indexOf(' ') + 1);
            } else {
                ans += sentence.substring(0, sentence.indexOf(' ')) + " ";
                sentence = sentence.substring(sentence.indexOf(' ') + 1);
            }
        }
        return ans.trim();
    }
    

    Y la salida debería ser:

    yhW, olleh there!
    El clima es muy bueno hoy!
    

Comments are closed.