Eso es.
Si intentas compilar ese código verás que no funciona debido a errores de sintaxis.
Pero bueno, lo importante es intentar comenzar el código y sintaxis a parte, la lógica si es bastante correcta.
No compila porque el WHILE no funciona de esa manera, no se puede combinar con un IF.
Y otra cosa a corregir sería que la variable String cadena hay que declarar antes de que comience el bucle.
Si la declaras dentro del bucle, fuera de él dicha variable "no existe". Solo es accesible DENTRO del bucle y ni siquiera vas a poder acceder a ella para establecer la condición del WHILE.
Así que hay que declararla fuera.
Tu código, corregido, podría quedar de la siguiente manera.
Fíjate que la clase String ya nos da un método para determinar si un objeto String está vacío o no.
Si ejecutas ese código, verás que compila y que hace lo que nos habíamos propuesto: pedir frases hasta introducir una vacía, es decir, pulsar INTRO sin escribir nada.
Primer objetivo cumplido. Ahora habría que conseguir:
- Extraer primera palabra de cada frase
- Concatenar cada una de estas primeras palabras para construir una frase con ellas
Bien, puesto hay que construir una frase, ya podemos intuir que vamos a necesitar una nueva variable, un String llamado por ejemplo frase, que será donde concatenaremos las primeras palabras de cada frase introducida.
Pero, ¿y como obtener la primera palabra de cada frase introducida?
Hay varias maneras, una que quizás se entiende fácil y además sirve para conocer mejor los métodos de la clase String que supongo es la intención de este ejercicio, es la siguiente.
Un String es una secuencia de caracteres y cada carácter está numerado con un índice, empezando desde el 0 en adelante.
Para determinar hasta donde llegan los caracteres de la primera palabra, habría que buscar cuál índice tiene el primer espacio en blanco de la frase.
Para obtener este índice, podemos usar el método
indexOf() y entre paréntesis le decimos que busque un espacio en blanco --> " "
Ese indice lo guardamos en una variable int.
Una vez lo tenemos, podemos usar el método
subString() para extraer del String cadena, la parte que nos interesa y guardarla en otro String.
Al método
subString() entre paréntesis le indicaremos dos valores int, el primero es el indice por el que ha de empezar la extracción de la subcadena (la primera palabra), que en este caso sería el 0. El segundo es el indice donde debe terminar la extracción, que es el indice que nos ha dado el método indexOf().
Con eso ya tenemos la primera palabra y podemos concatenarla ya en el String frase, añadiendo un espacio en blanco para que las palabras queden separadas unas de otras.
El bucle repite este proceso hasta que se introduzca una cadena vacía. Precisamente por esto, antes de intentar extraer la primera palabra, preguntaremos si el usuario ha introducido una cadena vacía. Si esta vacía no hacemos nada porque el proceso ha llegado a su fin.
Si NO esta vacía, será entonces cuando buscaremos la primera palabra.
Bien, si has entendido la lógica de este proceso, puedes intentar por tu cuenta añadir el código que falta.
En cualquier caso, te dejo el código que yo he usado para solucionarlo. Tu decides si intentarlo primero o no.
Sin embargo, el código que dejo a continuación no es perfecto. Funciona bien mientras se estén introduciendo frases de 2 palabras o más.
Pero si se introduce una frase de una sola palabra, el código falla y se produce una excepción.
Luego miraremos como evitar esto, pero primero, asegúrate de que entiendes el funcionamiento de la solución que hemos propuesto y también a ver si puedes deducir por qué motivo falla si la frase solo tiene una palabra.
Cuando todo esto esté claro, veremos como solucionarlo. No dudes en preguntar lo que haga falta.
Un saludo.