Sie sind auf Seite 1von 14

Universidad Tecnolgica de El Salvador

Programacin Orientada a Objetos virtual

Instrucciones de control

NOTA: LA SIGUIENTE INFORMACIN HA SIDO EXTRAIDA DEL SITIO:


http://www.codexion.com/tutorialesjava/java/nutsandbolts/ , PUES CONSIDER QUE EST BIEN
ADECUADA PARA EL TEMA QUE SE ABORDA. LOS EJEMPLOS MOSTRADOS FUNCIONAN A LA PERFECCIN,
YA HAN SIDO ANALIZADOS Y PORBADOS POR M.

Esta seccin describe las sentencias de toma de decisiones (if, else if, switch), las
sentencias de bucles (for, while, do while) y las sentencias de ramificacin (break,
continue, return) proporcionadas por el lenguaje de programacin Java.

Las sentencias if y else if

La sentencia if
La sentencia if es la ms bsica de las sentencias de control de flujo. Le indica al
programa que ejecute cierta parte del cdigo solamente si una condicin evala a
true.

La sentencia de control ms simple tiene la siguiente sintaxis:

if (expres_boolean) {
accion1;

donde expres_boolean es un dato del tipo boolean, o una expresin que se


evala a un boolean,

y accion1 la instruccin, o bloque de instrucciones, que se han de ejecutar si


expres_boolean es true.

La sentencia else if
La sentencia else if proporciona una ruta de ejecucin secundaria cuando una
clusula if evala a false.

Ejemplo:

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

El siguiente programa, IfElseDemo, asigna una nota segn la puntuacin de una


prueba: una A para una puntuacin de 90% o ms, una B para una puntuacin de
80% o ms, etc.

class IfElseDemo {
public static void main(String[] args) {

int testscore = 76;


char grade;

if (testscore >= 90) {


grade = 'A';
} else if (testscore >= 80) {
grade = 'B';
} else if (testscore >= 70) {
grade = 'C';
} else if (testscore >= 60) {
grade = 'D';
} else {
grade = 'F';
}
System.out.println("Nota = " + grade);
}
}

La salida del programa es:


Nota = C

Se habr fijado en que el valor de testscore puede satisfacer a ms de una


expresin de la sentencia compuesta: 76 >= 70 y 76 >= 60. Sin embargo, una
vez se ha satisfecho una condicin se ejecutan las sentencias adecuadas (grade =
'C';) y las dems condiciones no se evalan.

La sentencia switch

Al contrario de if y else if, la sentencia switch permite cualquier cantidad


de rutas de ejecucin posibles.. Un switch funciona con los datos primitivos
byte, short, char e int.

El siguiente programa, SwitchDemo, declara un int llamado month cuyo valor


representa un mes del ao. El programa muestra el nombre del mes, basado en el
valor de month, mediante la sentencia switch.

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

Ejemplo de switch 1:

class SwitchDemo {
public static void main(String[] args) {

int month = 8;
switch (month) {
case 1: System.out.println("Enero"); break;
case 2: System.out.println("Febrero");
break;
case 3: System.out.println("Marzo"); break;
case 4: System.out.println("Abril"); break;
case 5: System.out.println("Mayo"); break;
case 6: System.out.println("Junio"); break;
case 7: System.out.println("Julio"); break;
case 8: System.out.println("Agosto");
break;
case 9: System.out.println("Septiembre");
break;
case 10: System.out.println("Octubre");
break;
case 11: System.out.println("Noviembre");
break;
case 12: System.out.println("Diciembre");
break;
default: System.out.println("Mes no
vlido.");break;
}
}
}

En este caso se mostrar Agosto en la salida estndar.

El cuerpo de una sentencia switch se conoce como el bloque switch. Cualquier


sentencia contenida directamente por el bloque switch puede estar marcada por
una o ms etiquetas case o default. La sentencia switch evala su expresin
y ejecuta el caso (case) adecuado.

Tambin es posible, por supuesto, conseguir el mismo resultado con sentencias


else if:

int month = 8;
if (month == 1) {
System.out.println("Enero");
} else if (month == 2) {

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

System.out.println("Febrero");
}
. . . // etctera

La decisin de usar una sentencia else if o switch a menudo es simplemente


una cuestin de criterio propio. Podr decidir cul usar basndose en la legibilidad y
otros factores. Se puede utilizar una sentencia else if para tomar decisiones
basadas en rangos de valores o condiciones, mientras que una sentencia switch
solamente puede tomar decisiones basadas en un solo valor entero o enumerado.

Tambin es interesante la sentencia break que va detrs de cada case. Cada


sentencia break termina la sentencia switch que la envuelve. El control de flujo
contina con la primera sentencia a continuacin del bloque switch. Las
sentencias break son necesarias porque sin ellas las sentencias case fallaran, es
decir, sin un break el flujo del programa seguira secuencialmente a travs de
todas las sentencias case. El siguiente programa, SwitchDemo2, ilustra por qu
podra ser til hacer que una sentencia case falle:

Ejemplo de switch 2:

class SwitchDemo2 {
public static void main(String[] args) {

int month = 2;
int year = 2000;
int numDays = 0;

switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

case 2:
if ( ((year % 4 == 0) && !(year % 100 == 0))
|| (year % 400 == 0) )
numDays = 29;
else
numDays = 28;
break;
default:
System.out.println("Mes no vlido.");
break;
}
System.out.println("Nmero de das = " + numDays);
}
}

Esta es la salida del programa.

Nmero de das = 29

Tcnicamente el ltimo break no es necesario ya que el flujo se saldra de la


sentencia switch de todos modos. Sin embargo recomendamos usar un break
para evitar errores al modificar el cdigo. La seccin default gestiona los valores
que no sean tratados explcitamente por una de las secciones case.

Las sentencias while y do while

La sentencia while

La sentencia while ejecuta un bloque de sentencias continuamente mientras una


condicin sea verdadera true. Su sintaxis se puede resumir as:

while (expresin) {
sentencia(s);
}

La sentencia while evala expresin, que debe devolver un valor boolean. Si la


expresin evala a true, la sentencia while ejecuta la(s) sentencia(s) que hay en
el bloque while. La sentencia while contina evaluando la expresin y
ejecutando su bloque hasta que la expresin evale a false. Podemos usar la
sentencia while para imprimir los valores del 1 al 10 como se muestra en el
siguiente programa WhileDemo:

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

Ejemplo while:

class WhileDemo {
public static void main(String[] args){
int count = 1;
while (count < 11) {
System.out.println("Nmero: " + count);
count++;
}
}
}

Podr realizar un bucle infinito mediante la sentencia while del siguiente modo:

while (true){
// ponga aqu su cdigo
}

La sentencia do while

El lenguaje de programacin Java tambin proporciona la sentencia do while,


que se puede expresar as:

do {
sentencia(s);
} while (expresin);

La diferencia entre do while y while es que do while evala su expresin al


final en lugar de al inicio. Por lo tanto las sentencias del bloque do siempre se
ejecutan al menos una vez, como se muestra en el siguiente programa
DoWhileDemo:

Ejemplo while:

class DoWhileDemo {
public static void main(String[] args){
int count = 1;
do {
System.out.println("Nmero: " + count);
count++;

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

} while (count <= 11);


}
}
La sentencia for

La sentencia for proporciona una forma compacta de recorrer un rango de valores.


Los programadores a menudo se refieren a ella como el bucle for por la forma en
la que recorre su bloque hasta que se satisfaga la condicin indicada. La forma
general de la sentencia for se puede expresar del siguiente modo:

for (inicializacin; terminacin; incremento) {


sentencia(s);
}

Al usar esta versin de la sentencia for tenga en cuenta que:

La expresin inicializacin inicializa el bucle, se ejecuta una sola vez


cuando el bucle empieza.
El bucle termina cuando la expresin terminacin evala a false.
La expresin incremento se invoca despus de cada iteracin por el
bucle; es perfectamente aceptable que esta expresin incremente o
decremente un valor.

El siguiente programa, ForDemo, utiliza la forma general de la sentencia for para


mostrar los nmeros del 1 al 10 en la salida estndar:

Ejemplo For 1:

class ForDemo {
public static void main(String[] args){
for(int i=1; i<11; i++){
System.out.println("Nmero: " + i);
}
}
}

La salida de este programa es:


Nmero: 1
Nmero: 2
Nmero: 3
Nmero: 4
Nmero: 5
Nmero: 6
Nmero: 7

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

Nmero: 8
Nmero: 9
Nmero: 10

Fjese en cmo el cdigo declara una variable dentro de la expresin de


inicializacin. El mbito de esta variable se extiende desde su declaracin hasta el
final del bloque perteneciente a la sentencia for, por lo tanto tambin se puede usar
en las expresiones de terminacin e incremento. Es mejor declarar la variable que
controla una sentencia for en la expresin de inicializacin si sta no es necesaria
fuera del bucle. A menudo se utilizan los nombres i, j y k para controlar los bucles
for; al declararlas dentro de la expresin de inicializacin se limita su tiempo de
vida y se reduce la posibilidad de error.

Las tres expresiones del bucle for son opcionales; se puede crear un bucle inifinto
del siguiente modo:

for ( ; ; ) { // bucle infinito

// el cdigo va aqu
}

La sentencia for tambin tiene otra forma diseada para la iteracin a travs de
colecciones y arrays. A esta forma a veces se la denomina for mejorado (enhanced
fo) y se puede utilizar para compactar ms sus bucles y facilitar su lectura. Como
ejemplo, fjese en el siguiente array, que contiene los nmeros del 1 al 10:

int[] numeros = {1,2,3,4,5,6,7,8,9,10};

El siguiente programa, EnhancedForDemo, utiliza el bucle for mejorado para


recorrer el array:

Ejemplo For 2:

class EnhancedForDemo {
public static void main(String[] args){
int[] numeros = {1,2,3,4,5,6,7,8,9,10};
for (int elemento : numeros) {
System.out.println("Nmero: " + elemento);
}
}
}

En este ejemplo la variable elemento contiene el valor actual del array


numeros. La salida de este programa es igual a la anterior:

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

Nmero: 1
Nmero: 2
Nmero: 3
Nmero: 4
Nmero: 5
Nmero: 6
Nmero: 7
Nmero: 8
Nmero: 9
Nmero: 10

Se recomienda el uso de esta forma de la sentencia for en vez de la forma general


siempre que sea posible.

Sentencias de ramificacin
La sentencia break

La sentencia break tiene dos formas: etiquetada y sin etiquetar.

Sentencia break etiquetado:

Hemos visto la forma sin etiquetar en la seccin anterior en la que se trataba la


sentencia switch. Tambin, podr utilizar una sentencia break sin etiquetar para
terminar un bucle for, while o do while, como se muestra en el siguiente
programa BreakDemo:

Ejemplo break sin etiquetar:

class BreakDemo {
public static void main(String[] args) {

int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076,


2000, 8, 622, 127 };
int searchfor = 12;

int i;
boolean foundIt = false;

for (i = 0; i < arrayOfInts.length; i++) {

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

if (arrayOfInts[i] == searchfor) {
foundIt = true;
break;
}
}

if (foundIt) {
System.out.println("Encontrado " + searchfor
+ " en el ndice " + i);
} else {
System.out.println(searchfor+ " no est en
el array");
}
}
}

Este programa busca el nmero 12 en un array. La sentencia break, en amarillo,


termina el bucle for cuando se encuentra el valor. En ese momento del control de
flujo se transfiere a la sentencia print al final del programa.

La salida de este programa es:

Encontrado 12 en el ndice 4

Sentencia break etiquetado:

Una sentencia break sin etiquetar termina la sentencia switch, for, while o
do while ms interna, pero un break etiquetado termina una sentencia externa.
El siguiente programa, BreakWithLabelDemo, es parecido al programa anterior
pero utiliza bucles for anidados para buscar un valor en un array de dos
dimensiones. Un break etiquetado (como search) termina el bucle for externo
cuando se encuentra el valor:

Ejemplo break etiquetado:

class BreakWithLabelDemo {
public static void main(String[] args) {

int[][] arrayOfInts = { { 32, 87, 3, 589 },

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

{ 12, 1076, 2000, 8 },


{ 622, 127, 77, 955 }
};
int searchfor = 12;

int i;
int j = 0;
boolean foundIt = false;

search:
for (i = 0; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length; j++)
{
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search;
}
}
}

if (foundIt) {
System.out.println("Encontrado " + searchfor+
" en " + i + ", " + j);
} else {
System.out.println(searchfor
+ " no est en el array");
}
}
}

Esta es la salida del programa.

Encontrado 12 en 1, 0

La sentencia break termina la sentencia etiquetada; no transfiere el control de flujo


a la etiqueta. El control de flujo se transfiere a la sentencia inmediatamente posterior
a la sentencia etiquetada (terminada).

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

La sentencia continue
La sentencia continue se salta la iteracin actual de un bucle for, while o do
while.

Sentencia continue sin etiquetar:

La forma sin etiquetar salta al final del cuerpo del bucle ms interno y evala la
expresin booleana que lo controla. El siguiente programa, ContinueDemo,
recorre un String contando las veces que aparece la letra p. Si el carcter actual
no es una p la sentencia continue se salta el resto del bucle y sigue con el
siguiente carcter. Si es una p, el programa incrementa la suma de letras.

Ejemplo de la sentencia continue sin etiquetar:

class ContinueDemo
{
public static void main(String[] args)
{
String searchMe = "peter piper picked a peck of
pickled peppers";
int max = searchMe.length();
int numPs = 0;
for (int i = 0; i < max; i++) {
//interested only in p's
if (searchMe.charAt(i) != 'p')
continue;
//process p's
numPs++;
}
System.out.println("Encontradas " + numPs + " p's en
la cadena.");
}
}

Esta es la salida del programa.


Encontradas 9 p's en la cadena.

Compile el mismo programa eliminando la sentencia continue para ver el efecto


ms claramente. Cuando vuelva a ejecutarlo el contador estar equivocado,
indicando que ha encontrado 35 p's en lugar de 9.

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

Sentencia contenue sin etiquetar:

Una sentencia continue etiquetada se salta la iteracin actual de un bucle exterior


marcado con la etiqueta indicada. El siguiente programa,
ContinueWithLabelDemo, utiliza bucles anidados para buscar una subcadena
dentro de otra cadena. Se necesitan dos bucles anidados: uno que recorra la
subcadena y otro que recorra la cadena principal. El siguiente programa,
ContinueWithLabelDemo, utiliza la forma etiquetada de continue para
saltarse una iteracin del bucle exterior.

Ejemplo de la sentencia continue etiquetada:

class ContinueWithLabelDemo {
public static void main(String[] args) {

String searchMe = "Look for a substring in me";


String substring = "sub";
boolean foundIt = false;

int max = searchMe.length() - substring.length();

test:
for (int i = 0; i <= max; i++) {
int n = substring.length();
int j = i;
int k = 0;
while (n-- != 0) {
if (searchMe.charAt(j++)
!= substring.charAt(k++)) {
continue test;
}
}
foundIt = true;
break test;
}
System.out.println(foundIt ? "Encontrado" :
"No lo encontr");
}

Ing. Oswaldo Barrera Montes


Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos virtual

Esta es la salida del programa.

Encontrado

La sentencia return
La ltima de las sentencias de ramificacin es return. La sentencia return sale
del mtodo actual y devuelve el control de flujo a donde se haba invocado el
mtodo. La sentencia return tiene dos formas: una que devuelve un valor y otra
que no lo devuelve. Para devolver un valor, simplemente aada el valor (o una
expresin que calcule el valor) despus de la palabra clave return.

return ++count;

El tipo de dato devuelto debe coincidir con el tipo del valor de retorno declarado por
el mtodo. Cuando declare un mtodo como void, utilice la forma de return que
no devuelva un valor.

return;

Resumen de Sentencias de control de flujo:

La sentencia if es la ms bsica de las sentencias de control de flujo. Le indica al


programa que ejecute cierta parte del cdigo solamente si una condicin evala a
true.
La sentencia else if proporciona una ruta de ejecucin secundaria cuando una
clusula if evala a false. Al contrario de if y else if, la sentencia
switch permite cualquier cantidad de rutas de ejecucin posibles.
Las sentencias while y do while ejecutan un bloque de sentencias
contnuamente mientras una condicin sea true. La diferencia entre do while y
while es que do while evala su expresin al final en lugar de al inicio.
Las sentencias dentro del bloque do se ejecutan por lo menos una vez.
La sentencia for proporciona una forma compacta de recorrer un rango de valores.
Tiene dos formas, una de las cuales fue diseada para recorrer colecciones y arrays.

Ing. Oswaldo Barrera Montes

Das könnte Ihnen auch gefallen