
Uno de los conceptos más fundamentales en cualquier lenguaje de programación es el de bucle (lazo, loop). Un bucle es un conjunto de sentencia (puede no tener sentencias, bucle vacío) que se ejecutan repetidamente hasta que se cumple una determinada condición o bien se alcanza un número fijo de iteraciones o repeticiones de todas las sentencias while, do-while y for son las sentencias típicas de realización de bucles.
El bucle while es un bucle pre-test (pre-condición) donde la condición que debe cumplirse en el bucle para su continuación se comprueba antes de cada parada (iteración) del bucle. Generalmente esta sentencia se utiliza en situaciones en donde desconocemos la cantidad de ciclos que se deben ejecutar para producir un resultado.
Sintaxis
- while(condicion)
sentencia - while(condicion)
{
sentencia_1
sentencia_2
.
.
.
sentencia_n
}
Por lo tanto, la sentencia while evalúa condición y si es verdadera se ejecuta la/s sentencia/s. La diferencia con if es que while repite la operación una y otra vez hasta que condición es falsa. La variable que representa la condición del bucle se denomina también variable de control del bucle a que su valor determina si las sentencias o instrucciones del bucle se repite. La variable de control del bucle debe ser: 1) inicializada, 2) comprobada, y 3) actualizada para que el bucle se ejecute adecuadamente.
Ejemplo
while(saldo<objetivo)
{
años++;
double interes = saldo*tasa/100;
saldo = saldo+interes;
}
System.out.println(años + «, años.»);
Recordemos que en un bucle while realiza la comprobación en la parte superior del bucle; por consiguiente, puede presentarse alguna situación en la cual el bucle no se ejecutará. Si se desea asegurar la ejecución del bloque al menos una vez, se necesitará desplazar la condición o expresión lógica al final del bloque. Esta característica se realiza en el bucle do-while.
Sentencias break y continue
Dos sentencias se pueden utilizar en los bucles para romper la secuencia normal de los mismos: break (ya utilizada en la sentencia switch) y continue. La sentencia break se utiliza, a veces, para realizar una terminación anormal del bucle. Dicho de otro modo, una terminación antes de lo previsto. La sentencia continue se utiliza para terminar la iteración en curso del bloque de sentencias del bucle. Las sentencias anteriores se pueden utilizar con cualquiera de las sentencias del bucle de Java.
Ejemplo de break
while(mes<=100)
{
saldo = saldo+cuota;
double interes = saldo*tasaInteres/100;
saldo += interes;
if(saldo>=objetivo) break;
mes++;
}
Consejo de programación
El uso de break es una sentencia no recomendable ya que puede hacer difícil la compresión del comportamiento del programa. En particular, suele hacer muy difícil verificar los invariantes de los bucles. Por otra parte suele ser fácil la reescritura de los bucles sin la sentencia break.
A diferencia de C++, Java ofrece una sentencia break etiqueta que permite romper el flujo de control de bucles anidados.
Ejemplo de break etiqueta
bucleExterno: // etiqueta
do
{
. . .
while(siguiente>=0)
{
if(siguiente<-599)
break bucleExterno;
. . .
}
. . .
problema = . . .
}while(problema.equalsIgnoreCase(«si»));
En el ejemplo anterior bucleExterno etiqueta el bucle externo, que es un bucle do. Si el valor de la variable siguiente es menor que -559, entonces se ejecuta la sentencia break y termina el bucle do.
Nota
Es posible aplicar una etiqueta a cualquier sentencia, incluso en una sentencia if o en un bloque.
etiqueta:
{
. . .
if(condicion) break etiqueta; // salida del bloque
. . .
}
Ejemplo de continue
Scanner entrada = new Scanner(System.in);
for(int contador = 1; contado<=500; contador++)
{
System.out.print(«Introduzca un número positivo: «);
int n;
n = entrada.nextInt();
if(n<0) continue;
suma += n // no se ejecuta si n<0
}
Método exit()
La sentencia break termina un bucle o a la sentencia switch, pero no termina el programa; en caso de desear terminar el programa, Java tiene método exit definido en la clase System (clase predefinida que se incorpora automáticamente) que termina un programa tan pronto se invoca.
Ejemplo
System.out.print(«Introduzca un numero negativo: «);
int numero = entrada.nextInt();
if(numero>=0)
{
System.out.println(numero + «no es negativo»);
System.out.println(«programa abortado»);
System.exit(0);
}