expresiones y control del flujo java

70
UD Lenguajes y Herramientas de Desarrollo de Software Actividad 4 : Expresiones y control del flujo

Upload: alexander-ramirez-melendez

Post on 21-Jul-2015

139 views

Category:

Education


0 download

TRANSCRIPT

UD – Lenguajes y Herramientas de Desarrollo de Software

Actividad 4: Expresiones y control del flujo

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias condicionales.

o Sentencias if, else sencillas.

o Sentencias if, else complejas.

o Sentencia switch.

Sentencias de bucle.

o Bucles for.

o Bucle while.

o Bucle do/while.

o Construcciones especiales de control de bucles

ACTIVIDAD 4: Expresiones y control del flujo

Variables

En esta sección se explica la forma de declarar, delimitar el ámbito e inicializar las variables en el lenguaje Java.

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Variables y ámbitoHemos explicado dos formas de describir las variables: variables de tiposprimitivos y variables de tipos de referencia. También hemos visto doslugares en los que pueden declararse las variables: en el interior de unmétodo, o fuera del método, pero dentro de una definición de clase.

Las variables que se definen dentro de un método se denominan locales,aunque algunas veces también reciben el nombre de variablesautomáticas, temporales o de pila. Es preciso inicializar las variables deforma explicita antes de usarlas por primera vez. Los parámetros de losmétodos y los constructores también son variables locales, pero lasinicializa el código de llamada.

Las variables que se definen fuera de los métodos se crean cuando elobjeto se construye mediante la llamada new Xxx(). Hay dos tipos devariables dentro de esta categoría. El primero es una variable de clase quese declara utilizando la palabra clave static. Las variables marcadas comostatic se crean cuando se carga la clase y siguen existiendo mientras éstase mantenga cargada.

ACTIVIDAD 4: Expresiones y control del flujo

Variables y ámbitoEl segundo tipo es una variable de instancia que se declara sin la palabra clavestatic. Las variables de instancia existen mientras exista el objeto asociado. Lasvariables de instancia a veces se conocen como variables miembro porque sonmiembros de los objetos creados a partir de la clase. La variable static sedescribe con detalle más adelante en este mismo curso. Las variables miembroy las variables de clase se inicializan automáticamente en el momento decrearse.

Las variables correspondientes a parámetros de métodos definen losargumentos que se pasan en las llamadas a métodos. Cada vez que se hace unallamada a un método, se crea una variable que sólo dura hasta que se terminade ejecutar el método.Las variables locales se crean cuando el programa empieza a ejecutar el métodoy se destruyen cuando finaliza dicha ejecución. Ésta es la razón por la que lasvariables locales a veces se denominan temporales o automáticas. Las variablesque se definen dentro de una función miembro son locales para esa función,por lo que es posible usar el mismo nombre de variable en distintas funcionesmiembro para hacer referencia a distintas variables.

ACTIVIDAD 4: Expresiones y control del flujo

Variables y ámbitoEsto se ilustra en el ejemplo del Código 4-1 de la página 4-4.

Ejemplo

public class EjemploAmbito {private int i=1;

public void primerMetodo() {int i=4, j=5;this.i = i + j;segundoMetodo(7);

}public void segundoMetodo(int i) {

int j=8;this.i = i + j;

}}

ACTIVIDAD 4: Expresiones y control del flujo

Variables y ámbito

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

EjemploAmbito ambito = new EjemploAmbito();ambito.primerMetodo();}

}

Nota: Este código sirve únicamente para ilustrar las reglas de definición deámbitos. No es recomendable reutilizar los nombres de esta manera.

ACTIVIDAD 4: Expresiones y control del flujo

Variables y ámbitoEn la Figura 4-1 puede verse de forma gráfica el ámbito establecido paralas variables en el Código 4-1.

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Inicialización de las variablesPara poder usar una variable en un programa Java, es preciso inicializarlaantes. En el caso de las variables de pila de ejecución, es fácil para elcompilador comprobar si el código asigna un valor a la variable antes intentarusarlo: la referencia this y los parámetros de los métodos tienen valoresasignados cuando empieza a ejecutarse el método. Es posible comprobar lasvariables locales definidas en el método examinando únicamente el código deese método. Por tanto, el compilador sólo permite al código del método leerel valor de una variable cuando existe la certeza de que tiene uno asignado.

En el caso de los atributos de objetos situados en la memoria dinámica, no esposible realizar esta comprobación: ¿cómo puede el compilador saber si uncliente de nuestra clase llama a un método de tipo “set” para actuar sobre unobjeto antes de que otro cliente cualquiera llame a un método de tipo “get”para actuar sobre ese mismo objeto? La única forma razonable de resolvereste problema es obligar a asignar un valor inicial directamente en elconstructor. Si el programador no proporciona un valor predeterminado, loproporcionará el compilador. En la Tabla 4-1 figuran los valorespredeterminados de las variables de instancia con tipos primitivos y dereferencia.

ACTIVIDAD 4: Expresiones y control del flujo

Inicialización de las variables

Nota: Una referencia con valor null no hace referencia a ningún objeto.El intento de usar el objeto de referencia genera una excepción. Lasexcepciones son errores que se producen durante el tiempo deejecución y se describen con posterioridad en este módulo.

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Principio de inicialización antes de usoAunque las variables definidas fuera de los métodos se inicializanautomáticamente, las variables locales deben inicializarse de formamanual antes de usarlas. El compilador señala un error si detecta unasituación en la que una variable puede utilizarse antes de suinicialización.

public void hacerCalculo() {int x = (int)(Math.random() * 100);int y;int z;if (x > 50) {

y = 9;}z = y + x; // Posible uso antes de inicialización

}

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujoOperadores

En esta sección se describen los operadores utilizados en el lenguaje Java.

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Orden de precedencia de los operadores

Nota: El operador instanceof es exclusivo del lenguaje Java y se describe en el Módulo 6.

Los operadores del lenguaje Java son parecidos en estilo y función a los deC y C++. La Tabla 4-2 contiene una lista de operadores por orden deprecedencia (I-D significa asociativos de izquierda a derecha; D-I significaasociativos de derecha a izquierda).

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Operadores lógicosLa mayoría de los operadores de Java se han tomado de otros lenguajes secomportan de la forma esperada.

Los operadores relacionales y lógicos devuelven un resultado booleano (boolean).El valor 0 no se interpreta automáticamente como false y los valores distintos decero tampoco se consideran automáticamente

int i = 1;if (i) // genera un error de compilaciónif (i != 0) // Correcto

Los operadores boolean admitidos son !, &, ^ y | para las operaciones algebraicasbooleanas correspondientes a NOT, AND, XOR y OR respectivamente. Cada una deellas devuelve un resultado boolean.Los operadores && y || equivalen a los operadores & y | pero evalúanen cortocircuito.

ACTIVIDAD 4: Expresiones y control del flujo

Operadores lógicos de cortocircuitoLos operadores && (definido como AND) y || (definido como OR) evalúanexpresiones lógicas en cortocircuito. Observe este ejemplo:

MiFecha d = reserva.getFechaSalida();if ((d != null) && (d.day > 31)) {

// hacer algo con d}

La expresión booleana que forma el argumento de la sentencia if () es váliday totalmente segura. La razón es que la segunda subexpresión no se evalúasi la primera subexpresión es false porque, cuando la primera subexpresiónes falsa, la expresión completa siempre es falsa, independientemente decómo se evalúe la segunda subexpresión.Asimismo, si se utiliza el operador || y la primera expresión devuelve true,la segunda expresión no se evalúa porque ya se sabe que toda la expresiónes verdad.

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Operadores lógicos de bitsLas operaciones de manipulación de bits, que incluyen operaciones lógicas yde desplazamiento, realizan operaciones de bajo nivel directamente en lasrepresentaciones binarias utilizadas en los enteros.Estas operaciones no se utilizan mucho en sistemas de tipo empresarial,pero pueden ser vitales en sistemas gráficos, científicos o de control. Laposibilidad de operar directamente sobre los binarios puede contribuir aahorrar memoria, mejorar sustancialmente la eficiencia en ciertos cálculosy simplificar considerablemente las operaciones con conjuntos de bits, talescomo las de lectura o escritura en puertos de E/S paralelos.

El lenguaje Java admite operaciones de bits sobre tipos de datos enteros.Se efectúan mediante los operadores ~, &, ^ y | para las respectivasoperaciones NOT (complemento), AND, XOR y OR de nivel de bit (bitwise).

ACTIVIDAD 4: Expresiones y control del flujo

Operadores lógicos de bitsLa Figura 4-2 contiene ejemplos de los operadores de bits sobre númerosbinarios del tamaño de un byte.

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Operadores de desplazamiento a laderecha >> y >>>

El lenguaje Java proporciona dos operadores de desplazamiento a laderecha. El operador >> realiza un desplazamiento a la derechaaritmético o con signo. El resultado de este desplazamiento es que elprimer operando se divide por 2 elevado al número de vecesespecificado por el segundo operando. Por ejemplo:

El operador >> da como resultado la copia del bit de signo durante el desplazamiento.

128 >> 1 devuelve 128/21 = 64256 >> 4 devuelve 256/24 = 16-256 >> 4 devuelve -256/24 = -16

ACTIVIDAD 4: Expresiones y control del flujo

Operadores de desplazamiento a laderecha >> y >>>

El operador de desplazamiento a la derecha lógico o sin signo >>>funciona sobre el patrón de bits en lugar de sobre el significadoaritmético de un valor y siempre coloca ceros (0) en los bits de máspeso, por ejemplo:

1010 ... >> 2 da como resultado 111010 ...1010 ... >>> 2 da como resultado 001010 ...

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Operadores de desplazamiento a laizquierda <<

El operador << efectúa un desplazamiento a la izquierda. Comosultado, el primer operando se multiplica por dos elevado al númerode veces especificado por el segundo operando, por ejemplo:

128 << 1 devuelve 128*21 = 25616 << 2 devuelve 16*22 = 64

Los tres operadores de desplazamiento reducen su módulo deoperando derecho 32 en correspondencia a un tipo int y el módulo 64en correspondencia a un operando izquierdo de tipo long. Por tanto,cualquier expresión int x, x >>> 32 hace que x permanezca invariable yno coloca ningún 0 como cabría esperar.

ACTIVIDAD 4: Expresiones y control del flujo

Operadores de desplazamiento a laizquierda <<

Los operadores de desplazamiento sólo pueden utilizarse con tiposenteros. El desplazamiento a la derecha sin signo efectuado por >>>sólo es efectivo con valores int o long. Si se utiliza con un valor shorto byte, el valor se convierte (con extensión de signo) en un valor intantes de que se aplique >>>. En este punto, el desplazamiento sinsigno normalmente se ha convertido en un desplazamiento con signo.

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Ejemplos de operadores de desplazamientoLa Figura 4-3 contiene los patrones binarios de un número positivo y otronegativo, así como los patrones binarios resultantes de las tres operacionesde desplazamiento: >>, >>> y <<.

Nota: El código generado por estos ejemplos (incluida la salidaen pantalla del patrón binario completo) puede encontrarse enel archivo examples/mod04_stmts/TestShift.java.

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Concatenación de cadenas con +

El operador + realiza una concatenación de objetos String para generarun nuevo objeto String.

String saludo = "Dr. ";String nombre = "Pedro" + " " + "Moreno";String tratamiento = saludo + " " + nombre;

El resultado de la última línea es:Dr. Pedro Moreno

Si uno de los argumentos del operador + es un objeto String, el otroargumento se convierte en objeto String. Todos los objetos puedenconvertirse en objeto String de forma automática, pero el resultado puedeser bastante críptico. El objeto que no es del tipo String se convierte enuna cadena equivalente utilizando la función miembro toString().

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Conversión de tiposLa conversión de tipos consiste en asignar un valor de un tipo a una variable deotro tipo. Si los dos tipos son compatibles, el software de Java realiza la conversiónde forma automática. Por ejemplo, siempre es posible asignar un valor int a unavariable de tipo long. Cuando existe la posibilidad de perder información en unaasignación, el compilador le pide que confirme la asignación con una conversiónde tipos. Por ejemplo, puede comprimir un valor long en una variable int de laforma siguiente:

long valorGrande = 99L;int squashed = valorGrande; // Incorrecto, necesita

// conversión de tiposint squashed = (int) valorGrande; // Correcto

int squashed = 99L; // Incorrecto, necesita//

conversión de tipos

int squashed = (int) 99L; // Correcto, pero literal enteroint squashed = 99; // predeterminado

ACTIVIDAD 4: Expresiones y control del flujo

Conversión de tiposEl tipo de destino deseado se escribe entre paréntesis y se utiliza como prefijo dela expresión que deba modificarse. Aunque puede no ser necesario, esaconsejable escribir toda la expresión de conversión de tipos entre paréntesis. Delo contrario, la precedencia de los elementos de la operación puede crearproblemas.

ACTIVIDAD 4: Expresiones y control del flujo

Variables.

o Variables y ámbito

o Inicialización de las variables.

o Principio de inicialización antes de uso

Operadores.

o Orden de precedencia de los operadores.

o Operadores lógicos

o Operadores lógicos de bits.

o Operadores de desplazamiento a la derecha.

o Operador de desplazamiento a la izquierda.

o Ejemplos de operadores de desplazamiento.

o Concatenación de cadenas con +.

o Conversión de tipos.

o Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Promoción y conversión de expresionesEs posible promover las variables transformándolas en una forma más larga (porejemplo transformar un tipo int en long) cuando no hay riesgo de perderinformación.

long valgrande = 6; // 6 es un tipo int, correcto

int valormenor = 99L; // 99L es un tipo long, incorrecto

double z = 12.414F; // 12.414F es un tipo float, correcto

float z1 = 12.414; // 12.414 es double, incorrecto

En general, puede considerar que las expresiones son compatibles conla asignación de tipos si el tipo de la variable es, al menos, tan grande(valor máximo) como el tipo de la expresión.

En el caso de los operadores binarios, como el operador +, cuando losdos operandos tienen tipos numéricos primitivos, el tipo resultante sedetermina como el tipo más largo de los dos operandos o int.

ACTIVIDAD 4: Expresiones y control del flujo

Por tanto, todas las operaciones binarias sobre tipos numéricos dan comoresultado, como mínimo, un tipo int y puede que un tipo más largo si existenoperandos con tipos long, float o double en la expresión. Esto podría dar comoresultado un desbordamiento o una falta de precisión cuando se asigne elresultado a una variable.

Por ejemplo, el siguiente fragmento de código:short a, b, c;a = 1;b = 2;c = a + b;

Provoca un error porque eleva cada tipo short a la categoría de int antes deoperar con él. No obstante, si c se declara como int, o se efectúa una conversiónde tipos de la forma siguiente:

c = (short)(a + b);

Entonces el código funciona.

Promoción y conversión de expresiones

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias condicionales.

o Sentencias if, else sencillas.

o Sentencias if, else complejas.

o Sentencia switch.

Sentencias de bucle.

o Bucles for.

o Bucle while.

o Bucle do/while.

o Construcciones especiales de control de bucles

ACTIVIDAD 4: Expresiones y control del flujo

Las sentencias condicionales permiten ejecutar partesdel programa de forma selectiva en función del valor dedeterminadas expresiones. El lenguaje Java incluye lassentencias if y switch para bifurcaciones en dos o másdirecciones respectivamente.

Sentencias condicionales

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias condicionales.

o Sentencias if, else sencillas.

o Sentencias if, else complejas.

o Sentencia switch.

Sentencias de bucle.

o Bucles for.

o Bucle while.

o Bucle do/while.

o Construcciones especiales de control de bucles

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias if, else sencillasLa sintaxis básica de una sentencia if es:

La sintaxis básica de una sentencia if es:if ( <expresión_booleana> )<sentencia_o_bloque>

Por ejemplo:

if ( x < 10 )System.out.println("¿Ya has acabado?");

No obstante, se recomienda situar todas las sentencias de consecuencia en un bloque. Por ejemplo:

if ( x < 10 ) {System.out.println("¿Ya has acabado?");}

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias condicionales.

o Sentencias if, else sencillas.

o Sentencias if, else complejas.

o Sentencia switch.

Sentencias de bucle.

o Bucles for.

o Bucle while.

o Bucle do/while.

o Construcciones especiales de control de bucles

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias if, else complejas

if ( <expresión_booleana> )<sentencia_o_bloque>

else<sentencia_o_bloque>

Por ejemplo:if ( x < 10 ) {

System.out.println("¿Ya has acabado?");} else {

System.out.println("Sigo trabajando...");}

Si se necesita una cláusula else, es preciso usar la sentencia if-else:

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias if, else complejas

En caso de necesitar una serie de comprobaciones condicionales, esposible encadenar una secuencia de sentencias if-else-if:

if ( <expresión_booleana> )<sentencia_o_bloque>else if ( <expresión_booleana> )<sentencia_o_bloque>

Por ejemplo:

int cantidad = getCantidad(); // método definido en la claseif (cantidad < 0) {System.out.println("Error: el valor de cantidad es negativo.");} else if (cantidad > getCantidadMax()) {

System.out.println("Error: el valor de cantidad esdemasiado alto.");} else {System.out.println("Habrá " + cantidad +

" personas para comer hoy.");}

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias if, else complejasEl lenguaje Java se diferencia de C y C++ porque las sentencias if() adoptanexpresiones booleanas, no valores numéricos. No es posible realizarconversiones entre tipos boolean y tipos numéricos. Si tiene:

if (x) // x es int

Utilice:

if (x != 0)

La cláusula else de la sentencia es opcional y es posible omitirla si nodebe realizarse ninguna acción cuando la condición evaluada es falsa.

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias condicionales.

o Sentencias if, else sencillas.

o Sentencias if, else complejas.

o Sentencia switch.

Sentencias de bucle.

o Bucles for.

o Bucle while.

o Bucle do/while.

o Construcciones especiales de control de bucles

ACTIVIDAD 4: Expresiones y control del flujoLa sintaxis de la sentencia switch es:

switch ( <expresión> ) {case <constante1>:

<sentencia_o_bloque>*[break;]

case <constante2>:<sentencia_o_bloque>*[break;]

default:<sentencia_o_bloque>*[break;]

}

En la sentencia switch (<expresión>), el valor de <expresión> debe ser compatible con un tipo entero. La promoción se produce con los tipos byte, short o char. No se permiten las expresiones de coma flotante, long, ni las referencias a objetos (incluidos los tipos String).

ACTIVIDAD 4: Expresiones y control del flujoLa sintaxis de la sentencia switch es:

Nota: También se pueden utilizar tipos enumerados en los elementosexpresión> y <constanteN>. Véase la sección Tipos enumerados en la adtividad7.

La etiqueta default opcional indica el segmento de código que debeejecutarse cuando el valor de la variable o la expresión no coincide conninguno de los valores case. Si no se ha incluido break como últimasentencia del segmento de código de una determinada sentencia case, laejecución continúa en el segmento de código de la siguiente sentencia casesin comprobar el valor de la expresión de case.Es posible utilizar una sentencia return en lugar de break. Asimismo, si lasentencia switch está en un bucle, el uso de una sentencia continue tambiénprovocaría la salida de la construcción switch.

Nota: Nueve de cada diez sentencias switch requieren el uso de rupturas encada bloque case. El olvido de la sentencia break es la causa de la mayoríade los errores de programación de códigos en los que se utilizanconstrucciones con switch.Puede ver el ejemplo de una sentencia switch en el Código 4-2.

ACTIVIDAD 4: Expresiones y control del flujoLa sintaxis de la sentencia switch es:

Código 4-2 Ejemplo 1 de sentencia switch

switch ( modeloAutomovil) {case DELUXE:agregarAireAcondicionado();agregarRadio();agregarRuedas();agregarMotor();break;

case ESTANDAR:agregarRadio();agregarRuedas();agregarMotor();break;

default:agregarRuedas();agregarMotor();

}

ACTIVIDAD 4: Expresiones y control del flujo

La sintaxis de la sentencia switch es:El Código 4-2 configura un objeto coche basado en el modeloAutomovil. SimodeloAutomovil es la constante de tipo entero DELUXE, entonces seagrega al vehículo el aire acondicionado, además de la radio y, por supuesto,las ruedas y el motor. No obstante, si modeloAutomovil sólo es ESTANDAR,únicamente se le agrega una radio, las ruedas y el motor.Por último, todos los modelos de automóvil tienen ruedas y motor de formapredeterminada.

En el fragmento del Código 4-3 puede ver otro ejemplo de sentenciaswitch.

Código 4-3 Ejemplo 2 de sentencia switchswitch ( modeloAutomovil) {

case DELUXE:agregarAireAcondicionado();

case ESTANDAR:agregarRadio();

default:agregarRuedas();agregarMotor();

}

ACTIVIDAD 4: Expresiones y control del flujo

La sintaxis de la sentencia switch es:

El Código 4-3 resuelve las llamadas redundantes a los métodospermitiendo que el flujo de control descienda por los diferentes bloquescase. Por ejemplo, si el modeloAutomovil es DELUXE, entonces se llamaal método agregarAireAcondicionado. A continuación, el flujo de controlpasa a la siguiente sentencia case y llama al método agregarRadio, tras locual pasa a la sentencia default y llama a los métodos agregarRuedas yagregarMotor.

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias condicionales.

o Sentencias if, else sencillas.

o Sentencias if, else complejas.

o Sentencia switch.

Sentencias de bucle.

o Bucles for.

o Bucle while.

o Bucle do/while.

o Construcciones especiales de control de bucles

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias de bucle

Las construcciones en bucle permiten ejecutar bloques de sentencias deforma repetida. El lenguaje Java admite tres tipos de construcciones debucle: for, while y do. Los bucles for y while verifican la condición delbucle antes de ejecutar el cuerpo de la construcción. Los bucles doverifican la condición del bucle después de ejecutar el cuerpo de laconstrucción. Esto significa que for y while podrían no llegar a ejecutar elcuerpo del bucle ni siquiera una vez, mientras que do ejecuta el cuerpodel bucle al menos en una ocasión.

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias condicionales.

o Sentencias if, else sencillas.

o Sentencias if, else complejas.

o Sentencia switch.

Sentencias de bucle.

o Bucles for.

o Bucle while.

o Bucle do/while.

o Construcciones especiales de control de bucles

ACTIVIDAD 4: Expresiones y control del flujo

Bucles forLa sintaxis del bucle for es:

for ( <expr_inicial>; <expr_prueba>; <expr_alter> )<sentencia_o_bloque>

Por ejemplo:for ( int i = 0; i < 10; i++ )System.out.println(i + " al cuadrado es " + (i*i));

No obstante, se recomienda situar todas las sentencias del bucle en unbloque. Por ejemplo:

for ( int i = 0; i < 10; i++ ) {System.out.println(i + " al cuadrado es " + (i*i));}

ACTIVIDAD 4: Expresiones y control del flujo

Bucles for

En el ejemplo anterior, el valor int i se declara y define dentro del bloquefor. La variable i sólo es accesible dentro del ámbito de ese bloque forconcreto.

Nota: El lenguaje Java permite utilizar la coma como separador en lasestructuras de bucles for(). Por ejemplo, for (i = 0, j = 0; j < 10; i++, j++) { } esuna sintaxis válida que inicializa las variables i y j con el valor 0 y las vaincrementando después de ejecutar el cuerpo del bucle.

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias condicionales.

o Sentencias if, else sencillas.

o Sentencias if, else complejas.

o Sentencia switch.

Sentencias de bucle.

o Bucles for.

o Bucle while.

o Bucle do/while.

o Construcciones especiales de control de bucles

ACTIVIDAD 4: Expresiones y control del flujo

Bucle whileLa sintaxis del bucle while es como sigue:

while ( <expr_prueba> )<sentencia_o_bloque>

Por ejemplo:int i = 0;while ( i < 10 ) {

System.out.println(i + " al cuadrado es " + (i*i));i++;

}

Asegúrese de que la variable de control del bucle se haya inicializado dela forma adecuada antes de que empiece a ejecutarse el cuerpo del bucle.Es preciso actualizar la variable de control correctamente para evitarbucles infinitos.

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias condicionales.

o Sentencias if, else sencillas.

o Sentencias if, else complejas.

o Sentencia switch.

Sentencias de bucle.

o Bucles for.

o Bucle while.

o Bucle do/while.

o Construcciones especiales de control de bucles

ACTIVIDAD 4: Expresiones y control del flujo

Bucle do/while

La sintaxis del bucle do/while es como sigue:

do<sentencia_o_bloque>

while ( <expr_prueba> );

Por ejemplo:int i = 0;do {

System.out.println(i + " al cuadrado es " + (i*i));i++;} while ( i < 10 );

Como en el caso de los bucles while, asegúrese de que la variable de controldel bucle se inicialice correctamente, se actualice en el cuerpo del bucle y secompruebe de la forma adecuada.La construcción con for se utiliza en aquellos casos en que el bucle debeejecutarse un número determinado de veces. Las construcciones while y do seutilizan cuando el número de ejecuciones no está establecido de antemano.

ACTIVIDAD 4: Expresiones y control del flujo

Sentencias condicionales.

o Sentencias if, else sencillas.

o Sentencias if, else complejas.

o Sentencia switch.

Sentencias de bucle.

o Bucles for.

o Bucle while.

o Bucle do/while.

o Construcciones especiales de control de bucles

ACTIVIDAD 4: Expresiones y control del flujo

Construcciones especiales de control de bucles

Es posible utilizar las sentencias siguientes para controlar en mayormedida las sentencias de bucles:● break [<etiqueta>];

La sentencia break se utiliza para salir prematuramente de las sentencias switch,las sentencias de bucles y los bloques etiquetados.

● continue [<etiqueta>];La sentencia continue se utiliza para saltar directamente al final del

cuerpo del bucle y luego devolver el control a la sentencia de controldel bucle.

● <etiqueta> : <sentencia>La etiqueta identifica cualquier sentencia válida a la que deba transferirse elcontrol. En el caso de una sentencia break etiquetada, la etiqueta puedeidentificar cualquier sentencia. Si se trata de una sentencia continue etiquetada,la etiqueta debe identificar una construcción de bucle.

ACTIVIDAD 4: Expresiones y control del flujo

Sentencia breakHe aquí un ejemplo de bucle con una sentencia break sin etiquetar:

do {sentencia;if ( condición ) {break;

}sentencia;

} while ( expr_prueba );

Sentencia continueÉste es un ejemplo de bucle con una sentencia continue sin etiquetar:

do {sentencia;if ( condición ) {

continue;}sentencia;} while ( expr_prueba );

ACTIVIDAD 4: Expresiones y control del flujo

Uso de sentencias break con etiquetasÉste es un ejemplo de bucle con una sentencia break etiquetada:

outer:do {

sentencia1;do {

sentencia2;if ( condición ) {

break outer;}

sentencia3;} while ( expr_prueba );

sentencia4;} while ( expr_prueba );

Uso de sentencias continue con etiquetas

ACTIVIDAD 4: Expresiones y control del flujo

Uso de sentencias continue con etiquetas

He aquí un ejemplo de bucle con una sentencia continue etiquetada:

test:do {sentencia1;

do {sentencia2;if ( condición ) {

continue test;}

sentencia3;} while ( expr_prueba );

sentencia4;} while ( expr_prueba );