Sie sind auf Seite 1von 10

Condicionales

y ciclos 04
JA
Bauman / Dcima

Java Electrotecnia
Condicionales y ciclos
Java

Bloques de Instrucciones
Un bloque de instrucciones es un grupo de stas, encerradas entre llaves ({}). Se puede usar un
bloque en cualquier lugar en que se puede usar una instruccin simple. Sin embargo, el bloque crea un
alcance local para las instrucciones contenidas en su interior. Esto significa que se pueden declarar y usar
variables locales dentro de un bloque, y esas variables dejarn de existir despus de que termine la
ejecucin de las instrucciones del interior del bloque. Por ejemplo, a continuacin vemos un bloque dentro
de una definicin de mtodo que declara una nueva variable Y. Debido a que Y es ahora local del bloque,
no la podremos usar fuera del bloque en donde fue declarada:

void Metodo(int parametro) {


int X=10;
{ // inicio del bloque;
int Y = 50;
System.out.println("valor de X dentro del bloque:" + X);
System.out.println("valor de Y dentro del bloque:" + Y);
} // fin del bloque;
System.out.println("valor de X fuera del bloque:" + X);
System.out.println("valor de Y fuera del bloque:" + Y);
// esta ltima linea dar un error de compilacin
// porque la variable Y no existe fuera de el bloque
// donde fue creada
}

Los bloques de instruccin, por lo general, no se usan solos en una definicin de mtodo. Hasta ste
momento ha visto a los bloques rodeando principalmente a las definiciones de clases y mtodos, pero otro
uso muy comn de un bloque es en las construcciones de control de flujo, lo que veremos posteriormente.

Condicionales
Condicional if

Las condicionales if permiten que se ejecuten diferentes secciones de cdigo basado en el resultado
de una prueba de comparacin. La condicional if de Java es casi idntica a la de C.
La condicional if contiene la palabra clave if, seguida de una prueba booleana encerrada entre
parntesis y una instruccin (frecuentemente un bloque de instrucciones) que se ejecutar si la prueba es
cierta:

if (expresinBooleana) intruccinOBloque

Por ejemplo:

if (X<Y) System.out.println("X es menor que Y");

Una palabra clave else opcional proporciona la instruccin por ejecutar para cuando la prueba es
falsa.

2 POLITECNICO
if (X<Y)
System.out.println("X es menor que Y");
else
System.out.println("X es mayor que Y");

La diferencia entre las condicionales if de Java y las de C, o C++, es que en Java el resultado de la
prueba debe regresar un valor booleano, true o false, a diferencia de C, en donde el resultado de la
prueba tambin puede regresar un entero.

if (MotorEncendido == true)
System.out.println("El motor est encendido");
else {
System.out.println("Encendiendo motor");
if (NivelDeNafta >= 1)
EstadoMotor = true;
else
System.out.println("Poca nafta, el motor se ha apagado");
}
El operador condicional
Una alternativa para el uso de las palabras clave if y else en una instruccin condicional es usar el
operador condicional, llamado a veces operador ternario.
El operador condicional, es un operador ternario debido a que tiene tres trminos. El operador con-
dicional es una expresin, por lo tanto, regresa un valor (a diferencia del if ms general que puede dar
como resultado solamente la ejecucin de una instruccin o bloque).
El operador condicional es til para condiciones muy cortas o simples, y tiene la siguiente forma:

test ? Resultadocierto : Resultadofalso

test es una expresin condicional que regresa true o false, al igual que una prueba en una
instruccin if. Si la prueba evaluada es true, el operador condicional regresa el valor
Resultadocierto, y si es false, regresa el valor Resultadofalso. Por ejemplo, la siguiente ex-
presin condicional prueba los valores de X e Y, regresa el mas pequeo de los dos y asigna el valor a la
variable MasChico.

int MasChico = (X < Y) ? X : Y;

El operador condicional tiene una precedencia muy baja; es decir, es evaluado slo hasta despus de
que son evaluadas todas sus subexpresiones. Los nicos operadores con precedencia mas baja que los
operadores condicionales son los operadores de asignacin.
Condicional switch
Una prctica comn de programacin es probar una variable contra algn valor, si su valor no con-
cuerda con su valor de prueba, nuevamente se prueba con un valor de prueba diferente, y as sucesi-
vamente. Usando solamente instrucciones if esto puede llegar a ser bastante engorroso, debido a la
manera en que se da formato a la expresin de prueba y a la cantidad de expresiones de prueba que se
necesitan evaluar.
Un mecanismo comn de abreviatura para evitar los if anidados permite agrupar expresiones de
prueba y acciones en una sola instruccin. Java usa la palabra clave switch, que se comporta como lo
hace en C:

POLITECNICO 3
Condicionales y ciclos
Java

switch (test)
{
case ValorUno:
ResultadoUno;
break;
case ValorDos:
ResultadoDos;
break;
case ValorTres;
ResultadoTres;
break;
.
.
.
default:
ValorPorDefecto;
}

En la instruccin switch se compara un tipo de dato primitivo simple (byte, char, short o int) con
cada uno de los valores de case, de uno en uno, comenzando con el primero. Si una prueba evala a
true (la prueba iguala el valor de la variable test) se ejecutan la o las instrucciones que estn entre el
case y break. Si no hay concordancia despus de llevar a cabo toda la evaluacin, se ejecuta la
instruccin que se encuentra en el caso default. sta ltima es opcional, por lo que si ningn case
evala true y no existe default, la instruccin switch termina sin hacer nada.
Observe que la limitacin significativa de switch en Java es que las pruebas y los valores slo pueden
ser tipos primitivos, y adems slo tipos primitivos que se puedan convertir a int. No se pueden usar los
tipos de datos primitivos ms grandes (por ejemplo long o float), cadenas u otros objetos dentro de un
switch, y tampoco se puede probar cualquier otra relacin que no sea la de igualdad. Esto delimita la
utilidad de switch a nicamente las comparaciones ms simples, y en cambio, los if anidados pueden
trabajar con cualquier tipo de prueba sobre cualquier tipo de dato. El siguiente es un ejemplo simple de
una instruccin switch:

switch (Operando)
{
case '+':
SumarArgumentos(Argumento1, Argumento2);
break;
case '*':
MultiplicarArgumentos(Argumento1, Argumento2);
break;
case '-':
RestarArgumentos(Argumento1, Argumento2);
break;
case '/':
DividirArgumentos(Argumento1, Argumento2);
break;
}

Observe las instrucciones break que se incluyen al final de cada case. Se usa break para saltar fuera
de switch sin ejecutar ninguna de las instrucciones, incluyendo cualquier otra instruccin case. A
diferencia de algunos otros lenguajes de programacin que tienen un break asumido cuando se llega a
otra instruccin case, Java continuar con la ejecucin de las instrucciones del interior de switch hasta
que se encuentre un break o hasta que termine el switch. Esto, por lo menos, har que sea ms lenta

4 POLITECNICO
la ejecucin del programa y, en el peor de los casos, se ejecutarn las instrucciones sin haberlo
pretendido, por ejemplo:

char Operando = 't';


switch (Operando)
{
case 't': // esto evala a true
SumarArgs(Argumento1, Argumento2); //esto se ejecuta
// no ponemos break aqu
case '*': //esto no se evala
MultiplicarArgs(Argumento1, Argumento2); //esto se ejecuta
// no ponemos break aqu tampoco
case '-': // esto no se evala
RestarArgs(Argumento1, Argeumento2); //tambin se ejecuta
case '/':
DividirArgs(Argumento1, Argumento2);
break; //este break indica que se debe salir del bloque.
}

A veces este efecto en cascada es exactamente lo que se quiere que suceda, pero la mayora de las
veces tal vez quiera asegurarse de incluir un break para que solamente se ejecuten las instrucciones
necesarias.

Un uso til del efecto en cascada sucede cuando se quiere que diferentes valores de prueba ejecuten
las mismas instrucciones. En este caso se pueden usar varias lneas case sin resultado y el switch
ejecutar la primera instruccin que encuentre. Por ejemplo en la siguiente instruccin switch, se
imprime la cadena "X es un numero par", si X tiene los valores 2, 4, 6, u 8. Todos los dems valores
de X imprimen la cadena "X es un numero impar"; tener en cuenta que slo se toman nmeros en 0
y 9.

if (X >= 0 && X < 10)


switch (X)
{
case 2:
case 4:
case 6:
case 8:
System.out.println("X es un numero par");
break;
default:
System.out.println("Es un numero impar");
}

POLITECNICO 5
Condicionales y ciclos
Java

Ciclos
Ciclo for

El ciclo for, como sucede en C, repite una instruccin o bloque de stas un determinado nmero de
veces hasta que se satisface la condicin de prueba. Los ciclos for son usados frecuentemente para
iteraciones simples, en las que se repiten un bloque de instrucciones un nmero determinado de veces y
luego se detiene, pero se pueden usar los ciclos for para casi cualquier tipo de ciclo.

El ciclo for en Java se ve de la siguiente manera:

for (inicializacin; prueba; incremento) instruccinOBloque

La instruccin que define a un ciclo for tiene tres partes:

- Inicializacin: es una expresin que inicializa el principio del ciclo. Si se tiene un ndice de ciclo, esta
expresin puede declararlo e inicializarlo, por ejemplo, int Vueltas = 0;. Las variables que se
declararon en esta parte del ciclo for son locales para el ciclo mismo y dejan de existir despus de
que el ciclo termina su ejecucin.
- Prueba: es la verificacin que se hace antes de cada paso por el ciclo y despus de incrementar el
ndice del ciclo. La prueba debe ser una expresin o funcin booleana que regrese un valor booleano,
por ejemplo, Vueltas < 10;. Si la prueba es true el ciclo contina ejecutndose. Cuando la prueba
es false el ciclo detiene su ejecucin.
- Incremento: es cualquier expresin o llamada a funcin. Por lo general, este incremento se usa para
cambiar el valor del ndice del ciclo, a fin de llevar el estado del ciclo ms cercano a que regrese
false, y por lo tanto, salga del ciclo.

La parte de instruccinOBloque del ciclo for es la instruccin (o bloque de instrucciones) que se


ejecuta cada vez que itera el ciclo. Al igual de cmo sucede en if, se puede incluir una sola instruccin o
un bloque. El siguiente es un ejemplo de un ciclo for que inicializa todos los valores de un arreglo a
cadenas nulas:

String Arreglo[] = new String[10];


int Vuelta;

for (Vuelta = 0; Vuelta < Arreglo.length; Vuelta++)


Arreglo[Vuelta] = "";

Cualquiera de las partes de la definicin (por ejemplo, Vueltas) del ciclo for pueden ser instruc-
ciones vacas; es decir se puede usar simplemente un punto y coma como marcador de posicin para la
expresin faltante, y esa parte del ciclo for ser ignorada. Si se usa una instruccin nula en el ciclo for,
tal vez tenga que inicializar o incrementar usted mismo las variables o ndices de ciclo en cualquier otro
lugar del programa.

Tambin se puede tener una instruccin vaca en el cuerpo del ciclo for, si todo lo que se desea hacer
est en la primera lnea del ciclo. Por ejemplo, la siguiente es una instruccin que encuentra el primer
nmero primo mayor que 4000.

for (PrimoPrimero = 4001; noPrimo(PrimoPrimero); PrimoPrimero += 2)


;

6 POLITECNICO
Un error comn en C, que tambin se da en Java, es poner accidentalmente un punto y coma despus
de la primera lnea del ciclo for, como en el siguiente ejemplo:
Este punto y coma indica que no hay instruccin que
deba ejecutarse dentro del ciclo (instruccin nula).
for (X = 0; X < 10; X++); // termina el ciclo sin ejecutar.
System.out.println("Vuelta numero " + X);

Debido a que el primer punto y coma termina el ciclo con una instruccin vaca, el ciclo, de hecho, no
hace nada. La funcin println() ser ejecutada solamente una vez, debido a que est completamente
fuera del ciclo for. Tambin debido a que es una construccin de for vlida, el compilador no lo marcar
como error. Tenga cuidado de no cometer estos errores en sus programas. Este mismo error puede
cometerse tambin con las pruebas condicionales de if.
Ciclo while
El ciclo while se usa para repetir una instruccin o un bloque de stas mientras una condicin
particular sea true. Su sintaxis es la siguiente:

while (Condicin) instruccinOBloque

Condicin es una expresin booleana. Si regresa true, el ciclo while ejecuta las instrucciones del
cuerpo del ciclo y luego prueba nuevamente la condicin, repitiendo hasta que la condicin sea false.
Como se muestra en el siguiente ejemplo, el uso mas comn de un ciclo while es ejecutar un bloque de
instrucciones, aunque tambin se puede ejecutar una sola instruccin.
El siguiente es un ejemplo de un ciclo while que copia los elementos de un arreglo de enteros
(ArregloInt) a un arreglo de nmeros con coma flotante (ArregloFloat), convirtiendo a float cada
elemento conforme avanza. Sin embargo, hay un problema: si cualquiera de los elementos del primer
arreglo es 0, el ciclo terminar inmediatamente en ese momento. Para abarcar ambas condiciones en las
que todos los elementos hayan sido copiados o un elemento pueda ser 0, se puede usar una prueba
compuesta con el operador &&:

int Contador = 0;
while (Contador < ArregloInt.length && ArregloInt[Contador] != 0) {
ArregloFloat[Contador] = (float) ArregloInt[Contador++];
}

Si la condicin es inicialmente falsa la primera vez que se prueba (por ejemplo, si el primer elemento
del primer arreglo es 0), el cuerpo del ciclo while nunca ser ejecutado. Si se necesita ejecutar el ciclo
por lo menos una vez, se puede hacer alguna de las siguientes dos cosas:

- Duplicar el cuerpo del ciclo fuera del ciclo while.


- Usar un ciclo do...while (es la mejor opcin).
Ciclo do...while
El ciclo do...while es similar a un ciclo while, a excepcin de que do...while ejecuta una
instruccin o bloque determinado antes de probar la condicin. La principal diferencia es que los ciclos
while prueban la condicin antes de hacer el ciclo, lo cual da como resultado que nunca se ejecute el
cuerpo del ciclo si la condicin es false la primera vez que se le prueba. Los ciclos do...while eje-
cutan el cuerpo del ciclo por lo menos una vez antes de probar la condicin. Los ciclos do...while son
como el siguiente:

do instruccinOBloque while (Condicin);

POLITECNICO 7
Condicionales y ciclos
Java

Las instrucciones que son ejecutadas en cada iteracin son la parte del cuerpo del ciclo. La condicin es
una prueba, si regresa true, el ciclo se ejecuta nuevamente, si regresa false, el ciclo termina. No olvide
que en los ciclos do...while el cuerpo del ciclo se ejecuta al menos una vez.

El siguiente es un ejemplo de un ciclo do...while que imprime un mensaje cada vez que itera el
ciclo:

int X = 1;
do {
System.out.println("Vuelta numero " + X);
X++;
} while (X <= 10);

Cul ser la salida?

Salida de los Ciclos


En todos lo ciclos (for, while y do...while) el ciclo termina cuando se satisface la condicin que se
est probando. Qu pasa si sucede algo extrao dentro del cuerpo del ciclo y se quiere salir antes del
ciclo? Para eso se pueden usar las palabras clave break y continue.
Ya vio a break como parte de la instruccin switch; break detiene la ejecucin del switch y el
programa contina con la instruccin que se encuentra despus de la construccin switch. La palabra
clave break, cuando se usa con los dems ciclos, hace lo mismo: suspende inmediatamente la ejecucin
del ciclo actual. Si se tienen ciclos anidados dentro de ciclos, se contina simplemente ejecutando la
siguiente instruccin despus del ciclo.
Por ejemplo, recuerda el ciclo while que copia elementos de un arreglo de enteros a un arreglo de
nmeros flotantes? Lo hace hasta que llega al final del arreglo o hasta que se llega a un 0:

while (Contador < ArregloInt.length && ArregloInt[Contador] != 0)

Si usted quisiera podra probar esta ltima condicin dentro del cuerpo del ciclo while y luego usar un
break para salir del ciclo.

int Contador = 0;
while (Contador < ArregloInt.length) {
if (ArregloInt[Contador] == 0) break;
ArregloFloat[Contador] = (float) ArregloInt[Contador++];
}

continue es similar a break, excepto que en vez de suspender la ejecucin del ciclo completamente,
el ciclo inicia la siguiente iteracin. En los ciclos while y do...while esto significa que comienza
nuevamente la ejecucin del bloque, y en los ciclos for se incrementa el ndice del ciclo y luego se
ejecuta el bloque. continue es til cuando se quieren ignorar instrucciones subsecuentes y continuar
simplemente con la siguiente iteracin del ciclo. En el ejemplo anterior de la copia de un arreglo a otro se
puede probar si el elemento actual es 0, y de serlo, reinicia el ciclo para que el arreglo resultante no
contenga un cero. Observe que debido a que se estn saltando elementos en el primer arreglo ahora hay
que llevar cuenta de dos contadores de ndice de arreglo diferentes.

8 POLITECNICO
int ContadorUno = 0;
int ContadorDos = 0;
while (ContadorUno < ArregloInt.length) {
if ( ArregloInt[ContadorUno] == 0) {
ContadorUno++;
continue;
}

ArregloFloat[ContadorDos++] = (float) ArregloUno[ContadorUno++];


}

Ciclos Etiquetados
Tanto break como continue pueden tener una etiqueta opcional que le dice a Java a dnde hay que
saltar. Sin una etiqueta, break salta fuera del ciclo actual hacia un ciclo de nivel superior (en caso de que
exista) o a la siguiente instruccin que est fuera del ciclo actual. En cambio, continue vuelve a iniciar el
ciclo actual. Mediante breaks y continues etiquetados se puede saltar fuera de ciclos anidados o
continuar un ciclo fuera del ciclo actual.
Para crear un ciclo etiquetado, simplemente aada una instruccin de etiqueta seguida por dos puntos
antes de la parte inicial de la definicin de ciclo. Luego, cuando necesite saltar a un nivel especfico, use
break o continue seguido del nombre de la etiqueta:

Salir:
for (int X = 0; X < 10; X++) {
while (Y < 50) {
if (X * Y == 400)
break Salir;
... ... ...
}
... ... ...
}

En este fragmento de cdigo, la etiqueta Salir identifica el ciclo mas externo. Luego, dentro de los
ciclos for y while, cuando se satisface la condicin particular, un break Salir causa que la ejecucin
de ambos ciclos se interrumpa en vez de hacerlo solamente en el ciclo while.
A continuacin se da otro ejemplo. El siguiente fragmento de cdigo contiene un ciclo for anidado. Si
la suma de los valores de los dos contadores es mayor que cuatro se sale de ambos ciclos.

Salir:
for (int X = 1; X <= 5; X++)
for (int J = 1; J <= 3; J++) {
System.out.println("X es " + X + ", J es "+ J);
if ( (X+J) > 4 )
break Salir;
}
System.out.println("Final de las vueltas");

POLITECNICO 9
Condicionales y ciclos
Java

Salida del programa anterior:

X es 1, J es 1
X es 1, J es 2
X es 1, J es 3
X es 2, J es 1
X es 2, J es 2
X es 2, J es 3
Final de las vueltas

Como se puede ver, el ciclo itera hasta que la suma de X e Y es mayor que cuatro, y luego ambos
ciclos salen a la instruccin que est a continuacin del bloque for mas externo, haciendo que se imprima
el mensaje final.

10 POLITECNICO

Das könnte Ihnen auch gefallen