Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Dimitar Stefanov en 02 de Marzo 2016, 20:16

Título: diseño bucle while con break? condición de salida salir por la ventana CU00659B
Publicado por: Dimitar Stefanov en 02 de Marzo 2016, 20:16
Buenas a todos.

Os dejo una posible solución del ejercicio CU00659B del curso Java desde cero.

Citar
EJERCICIO

Crea una clase con un método main que pida una entrada de teclado y usando un bucle while, el método length de la clase String y el método substring de la clase String, muestre cada una de las letras que componen la entrada. Por ejemplo si se introduce “ave” debe mostrar:

Letra 1: a
Letra 2: v
Letra 3: e

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java

public class BucleWhile{

    public static void main(String []args){
        System.out.println("Introduzca una cadena de texto");
        String msg = "";
        Scanner entradaPorConsola = new Scanner(System.in); //Creación de un objeto Scanner
        msg = entradaPorConsola.nextLine(); //Invocación un método sobre un objeto Scanner
        int i=0;
        while(i<msg.length()){
            System.out.println("Letra "+(i+1)+":"+msg.substring(i,i+1));
            i++;
            if(i==msg.length()){break;}
        }
    }
}

Gracias
Título: Re:diseño bucle while con break? condición de salida salir por la ventana CU00659B
Publicado por: Mario R. Rancel en 04 de Marzo 2016, 10:43
Buenos días, aunque el código funciona deberías corregir una línea errónea

La línea if(i==msg.length()){break;} no es útil, ya que la condición de entrada al bucle es while(i<msg.length()). Si i fuera i==msg.length() no se habría entrado al bucle. Esto significa que esa condición nunca se va a cumplir. Si nunca se va a cumplir no tiene sentido tener esa línea ahí.

El otro motivo para no tener esa línea ahí es que en un bucle while siempre debe producirse la salida del bucle a través de la condición del bucle. Una salida con break solo debe usarse en casos excepcionales donde sea estrictamente necesario usar el break.

Si lees comentarios en otros hilos, salir de un while con un break se compara con salir de una casa por la ventana ¿Se consideraría correcto salir de una casa por la ventana pudiendo salir por la puerta? No, por eso en un bucle while se debe salir del bucle a través de su condición en lugar de a través de un break.

Saludos
Título: Re:diseño bucle while con break? condición de salida salir por la ventana CU00659B
Publicado por: Dimitar Stefanov en 04 de Marzo 2016, 12:08
Buenas, Mario.

Ahora entiendo. Había entendido más la condición de salida del bucle "while". Es decir, mientras se cumple la condición de "while - mientras" se repiten las instrucciones del bucle, pero a la que no se cumple ya la condición se saldrá del bucle. Es decir, cuando "i<msg.length()" ya no cumple esta condición ya se saldrá del bucle, o sea, no hace falta de un "break".

Por lo entendido, el código quedará de la siguiente manera:

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java

public class BucleWhile{

    public static void main(String []args){
        System.out.println("Introduzca una cadena de texto");
        String msg = "";
        Scanner entradaPorConsola = new Scanner(System.in); //Creación de un objeto Scanner
        msg = entradaPorConsola.nextLine(); //Invocación un método sobre un objeto Scanner
        int i=0;
        while(i<msg.length()){
            System.out.println("Letra "+(i+1)+":"+msg.substring(i,i+1));
            i++;
        }
    }
}


Lo único que he hecho es eliminar la línea:

Código: [Seleccionar]
if(i==msg.length()){break;}
Gracias.