Escolar Documentos
Profissional Documentos
Cultura Documentos
Instrucciones de control
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.
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.
if (expres_boolean) {
accion1;
La sentencia else if
La sentencia else if proporciona una ruta de ejecucin secundaria cuando una
clusula if evala a false.
Ejemplo:
class IfElseDemo {
public static void main(String[] args) {
La sentencia switch
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;
}
}
}
int month = 8;
if (month == 1) {
System.out.println("Enero");
} else if (month == 2) {
System.out.println("Febrero");
}
. . . // etctera
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;
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);
}
}
Nmero de das = 29
La sentencia while
while (expresin) {
sentencia(s);
}
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
do {
sentencia(s);
} while (expresin);
Ejemplo while:
class DoWhileDemo {
public static void main(String[] args){
int count = 1;
do {
System.out.println("Nmero: " + count);
count++;
Ejemplo For 1:
class ForDemo {
public static void main(String[] args){
for(int i=1; i<11; i++){
System.out.println("Nmero: " + i);
}
}
}
Nmero: 8
Nmero: 9
Nmero: 10
Las tres expresiones del bucle for son opcionales; se puede crear un bucle inifinto
del siguiente modo:
// 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:
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);
}
}
}
Nmero: 1
Nmero: 2
Nmero: 3
Nmero: 4
Nmero: 5
Nmero: 6
Nmero: 7
Nmero: 8
Nmero: 9
Nmero: 10
Sentencias de ramificacin
La sentencia break
class BreakDemo {
public static void main(String[] args) {
int i;
boolean foundIt = false;
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");
}
}
}
Encontrado 12 en el ndice 4
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:
class BreakWithLabelDemo {
public static void main(String[] args) {
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");
}
}
}
Encontrado 12 en 1, 0
La sentencia continue
La sentencia continue se salta la iteracin actual de un bucle for, while o do
while.
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.
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.");
}
}
class ContinueWithLabelDemo {
public static void main(String[] args) {
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");
}
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;