Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: PARTISANO70 en 09 de Mayo 2019, 22:43
-
Propuesta de solución para el ejercicio CU00659B del tutorial pdf de programación Java desde cero:
/**
* Write a description of class deletreaConWhile here.
*
* @author (RMB)
* @version (a version number or a date)
*/
import java.util.Scanner;
public class deletreaConWhile
{
public static void main (String[] args){
System.out.println("Inicial el Programa");//Letrero de inicio del programa
System.out.println("Deletrear con while\n");//Letrero de lo que hace el programa
//Declaración de variables tipo String
String cadena;
String deletrea;
cadena = "";
deletrea = "";
//Declaración de variables Contadoras
int lonCad; //Guarda la longitud de la cadena
int contador = 0; //Primer parámetro del substring
int i = 1; //Segundo parámetro del substring
System.out.println("Introduce una cadena"); //Letrero de indicación
Scanner scCadena = new Scanner (System.in); //Creamos el objeto tipo Scanner
cadena = scCadena.nextLine(); //Guardamos el valor del objeto en la variable
System.out.println("La cadena dice " + cadena); //Mostramos la cadena completa
lonCad = (cadena.length()+1); //Guardamos la longitud de la cadena
System.out.println("La cadena contiene " + (lonCad-1)+ " letras"); //Nos muestra cuantas letras tiene la cadena
while(true){ //Se inicia el ciclo while con la condición verdadera (true)
deletrea=cadena.substring(contador,i); //Almacenamos la subcadena en la variable deletrea
System.out.println("Letra "+ i + " "+ deletrea);
contador++; //Incrementamos el valor de contador en 1
i++; //Incrementamos el valor de i en 1
if (i == lonCad){ //Establecemos un condición para poder romper el ciclo while
break; //Cuando el valor de i se compare con el valor de la longitud se rompe el ciclo
} //Cierre de la condición
} //Cierre del ciclo while
} //Cierre del método principal
} //Cierre de la clase
-
Hola.
Aunque el programa funcione, has optado por usar un bucle infinito (while(true)) para luego "romperlo" con un break cuando se cumpla la condición de salida.
ESto lo has hecho siguiendo el ejemplo explicativo de esa entrega 59, pero fíjate que en esa misma entrega ya se indica que esta forma de hacer el bucle while es meramente un ejemplo explicativo y no debería ser la forma habitual de proceder
[...] en general la salida a un bucle se realizará de forma natural mediante la evaluación de la condición y no mediante una instrucción break;.
Así que lo ideal sería que reescribas tu bucle while y en el lugar del true pongas ahí la condición que ha de cumplirse para que se repita el while.
Esta condición es muy similar a la que has usado en el if, pero será distinta.
Fíjate que en el if, has tenido que pensar en la condición que VA A PONER FIN al bucle.
En cambio, para la condición del while, vas a tener que pensar en la condición que VA A HACER QUE SE REPITA el bucle.
Es decir, MIENTRAS se cumpla dicha condición, el bucle se repetirá. Cuando deje de cumplirse, el bucle finalizará.
El uso de break para romper bucles, ya sean while, do..while o for debe evitarse siempre que sea posible.
Habrá situaciones muy concretas en las que usar break puede suponer una simplificación importante del código y entonces sí podría ser preferible su uso.
Hay puristas de la programación que te dirán que no, que usar break para romper bucles es prácticamente un sacrilegio je je...
Yo no diría tanto. Siempre evito usar break, pero si me encuentro en una de esas situaciones que hacen que el código quede más simplificado y más legible, entonces no dudo en emplearlo.
En fin, prueba a reescribir ese while como te he dicho, y si tienes dudas pregunta.
Elegir bien las condiciones en los bucles tiene su importancia. En este caso no es difícil, pero hay ocasiones en las que hay que combinar más de una condición. Y saber elegir las condiciones óptimas y en que orden combinarlas, es importante.
-
Código:
/**
* Write a description of class deletreaConWhile here.
*
* @author (RMB)
* @version (a version number or a date)
*/
import java.util.Scanner;
public class deletreaConWhile
{
public static void main (String[] args){
System.out.println("Inicial el Programa");//Letrero de inicio del programa
System.out.println("Deletrear con while\n");//Letrero de lo que hace el programa
//Declaración de variables tipo String
String cadena;
String deletrea;
cadena = "";
deletrea = "";
//Declaración de variables Contadoras
int lonCad; //Guarda la longitud de la cadena
int contador = 0; //Primer parámetro del substring
int i = 1; //Segundo parámetro del substring
System.out.println("Introduce una cadena"); //Letrero de indicación
Scanner scCadena = new Scanner (System.in); //Creamos el objeto tipo Scanner
cadena = scCadena.nextLine(); //Guardamos el valor del objeto en la variable
System.out.println("La cadena dice " + cadena); //Mostramos la cadena completa
lonCad = (cadena.length()+1); //Guardamos la longitud de la cadena
System.out.println("La cadena contiene " + (lonCad-1)+ " letras"); //Nos muestra cuantas letras tiene la cadena
while(i < lonCad ){ //Se inicia el ciclo while mientras el valor de i < la longitud de la cadena
deletrea=cadena.substring(contador,i); //Almacenamos la subcadena en la variable deletrea
System.out.println("Letra "+ i + " "+ deletrea);
contador++; //Incrementamos el valor de contador en 1
i++; //Incrementamos el valor de i en 1
} //Cierre del ciclo while
} //Cierre del método principal
} //Cierre de la clase
-
OK. Ahora ningún purista de la programación podrá acusarte de cometer sacrilegios con el break je je..
Por último comentar que, sin duda está todo correcto, pero siempre hay alguna mejora posible y por ejemplo en este caso podrías haberte ahorrado algunas variables como lonCad y contador, haciendo algo como esto:
int i = 0;
while(i < cadena.length() ){
deletrea=cadena.substring(i, i+1);
System.out.println("Letra "+ i + " "+ deletrea);
i++;
}
E incluso la variable deletrea nos la podríamos ahorrar también.
Esto lo comento como algo secundario. No es importante ahora mismo.
De hecho cuando se empieza a programar, puede venir bien usar más variables de lo necesario para clarificar mejor las ideas de lo que se está haciendo.
Con el tiempo, cuando ya se tienen las ideas más claras, tú mismo irás descubriendo que el código se puede simplificar fácilmente.
Un saludo.
-
Muchas gracias por las observaciones para corregir el desarrollo del ejercicio; seguimos en la capacitación.. Saludos