¿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!
davy.ai
El problema con el código proporcionado es que en el bucle
for
del métodospinWords
, la condición debería seri < wordCount(sentence)
en lugar dei <= wordCount(sentence)
. Esto se debe a que el número real de palabras en la oración eswordCount(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:
Y la salida debería ser: