Hola, el primer código con el while true tiene poco sentido aunque funcione. Un bucle while se utiliza para repetir algo un número de veces que depende de la evolución de un contador, normalmente como while (contador < 10) por ejemplo. Escribir while(true) equivale a decir que el bucle se seguirá ejecutando indefinidamente (excepto si hay una salida a través de un break) pero esto no es algo normal. En general ¿para qué vamos a querer que un bucle se ejecute indefinidamente?
El segundo código también tiene poco sentido: normalmente un bucle for no se pone dentro de un bucle while, es decir, un bucle se controla con un while, un do while , o con un for, pero no tiene sentido tratar de controlar el mismo proceso con dos tipos de bucles distintos.
El ejercicio pide usar un bucle while, por tanto no debes usar bucle for.
Ten en cuenta que los bucles for pueden escribirse como bucles while. Por ejemplo:
for(int i=0; i<entrada.length(); i++){ ... }
Es equivalente a:
contador = 0;
while(contador<entrada.length()) {
...
contador = contador+1;
}
En resumen, tendrías que cambiar el diseño para usar sólo bucle while (sin break).
Saludos