Autor Tema: Por qué no se debe usar break para salir de un bucle while mal diseño CU00662B  (Leído 6591 veces)

guillemolero

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Hola a todos.

Pongo aquí el código del ejercicio resuelto de la entrega 62 del curso.
Lo he comprobado con palabras de distinto e igual tamaño y parece que funciona correctamente. Espero corrección alguna :3.

Muchas gracias :D


Código: [Seleccionar]
import java.util.Scanner;

public class Ejercicio
{
    public static void main(String [] args)
    {
        String entrada1 = "";
        String entrada2 = "";
       
        System.out.println("Introduce la primera palabra:");
        Scanner scanner1 = new Scanner(System.in);
        entrada1 = scanner1.nextLine();
       
        System.out.println("Introduce la segunda palabra:");
        Scanner scanner2 = new Scanner(System.in);
        entrada2 = scanner2.nextLine();
       
        int k = 0;
       
        while (entrada1.length() > k || entrada2.length() > k)
        {
            k+=1;
            System.out.println("¿Letra " +k+ " igual en las dos palabras?");
            if(entrada1.length() >=k && entrada2.length() >= k)
            {
                if(entrada1.substring(k-1,k).equals(entrada2.substring(k-1,k)))
                {
                    System.out.println("Si");
                }
                else
                {
                    System.out.println("No");
                }
            }
            else if (entrada1.length() < k)
            {
                System.out.println("La primera palabra no tiene letra " + k);
            }
            else if (entrada2.length() < k)
            {
                System.out.println("La segunda palabra no tiene letra " + k);
            }
            else
            {
                break;
            }
        }
    }
}
« Última modificación: 10 de Agosto 2015, 10:56 por Alex Rodríguez »

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:Java, ejercicio resuelto CU00662B.
« Respuesta #1 en: 09 de Agosto 2015, 16:03 »
Hola Guille!

Primeramente he de darte la bienvenida al foro ya que veo que es tu primera publicación, bienvenido!

Analizando tu ejercicio veo que lo has hecho muy bien, felicitaciones por ello.
Lo único para observar que tengo por mi parte es respecto a la utilización de la sentencia 'break' que empleas para salir del bucle while.
Si bien es válida la utilización de 'break' siempre trataremos de eviarla, diseñando los bucles de tal manera que nuestra salida del while sea más limpia, es decir: cuando la condición impuesta en while deja de cumplirse.

En este caso particular de tu ejercicio, la utilización del break no era necesaria. Reescribo el código eliminando el último 'else' (y convietiendo el último 'else if' en 'else').

Código: [Seleccionar]
import java.util.Scanner;

public class Ejercicio
{
    public static void main(String [] args)
    {
        String entrada1 = "";
        String entrada2 = "";
       
        System.out.println("Introduce la primera palabra:");
        Scanner scanner1 = new Scanner(System.in);
        entrada1 = scanner1.nextLine();
       
        System.out.println("Introduce la segunda palabra:");
        Scanner scanner2 = new Scanner(System.in);
        entrada2 = scanner2.nextLine();
       
        int k = 0;
       
        while (entrada1.length() > k || entrada2.length() > k)
        {
            k+=1;
            System.out.println("¿Letra " +k+ " igual en las dos palabras?");
            if(entrada1.length() >=k && entrada2.length() >= k)
            {
                if(entrada1.substring(k-1,k).equals(entrada2.substring(k-1,k)))
                {
                    System.out.println("Si");
                }
                else
                {
                    System.out.println("No");
                }
            }
            else if (entrada1.length() < k)
            {
                System.out.println("La primera palabra no tiene letra " + k);
            }
            else
            {
                System.out.println("La segunda palabra no tiene letra " + k);
            }
           
        }
    }
}

Analízalo y cualquier duda estamos aquí para volverlo a revisar.

guillemolero

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Java, ejercicio resuelto CU00662B.
« Respuesta #2 en: 09 de Agosto 2015, 16:38 »
Ya entiendo ¡Tienes toda la razón!

Gracias por el recibimiento. Voy a corregir el código ahora mismo. Y ya que estoy... Una pregunta: ¿Por qué está tan mal visto el uso de break en programación?

Siempre he tenido esa curiosidad :P

Un saludo.

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Hola Guille:

Bueno, para responder a tu pregunta con solidéz argumental y espaldas para sostener lo dicho creo que deberíamos invocar a alguien con más estrellas y galardones en su uniforme que las que luzco yo.  ;D

Hasta que eso suceda me arriesgaría a decir que el uso de la sentencia break cuando el bucle puede ser resuelto sin él, evidencia un pobre diseño.
De todos modos no creo que se trate de un mero hecho estético evitar el break, sino que pienso podría estar relacionado con  cuestiones de diseño de estructura y solidez.
Igualmente convengamos también que el uso del break no es un error, de hecho forma parte del set de sentencias de Java.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, sin estrellas ni galardones  ;), el uso de instrucciones que crean disrupciones en el flujo natural de programas se consideran inadecuadas por generar estructuras de código de diseño pobre y difícil seguimiento. Un bucle while tiene una puerta natural para entrar o salir (la condición). Salir con un break es como salir por la ventana, puedes hacerlo, pero no es lo más adecuado.

Para quien quiera leer más: Modificación directa del flujo de programas: entregas CU00177A a CU00183A del curso de Bases de la programación http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=28&Itemid=59

Saludos

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Muchas gracias Alex.
Y excelente el aporte del material para consultar. Saludos.

guillemolero

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Ya veo.

Muchísimas gracias a ambos y ¡perdón por las molestias!

Seguiré con el curso a ver si lo termino con éxito :D. Un saludo.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".