Sie sind auf Seite 1von 44

Clase 5

Lecture 4: Sentencias de
Seleccin
Despus de haber ledo y estudiado este captulo usted
podr
Implementar un control de seleccin utilizando sentencias if
Implementar un control de seleccin utilizando sentencias
switch
Escribir expresiones booleanas utilizando expresiones
relacionales y boolenas.
Evaluar correctamente expresiones booleanas
Sentencias if anidadas
Describir como son comparados los objetos
Elegir una sentencia de control de seleccin apropiada dada
una tarea.

Ing. Elizabeth Vidal 2


Estructuras de Control
3 Estructuras de control
Secuencia
Seleccin
Repeticin

Suficiente para todos los propsitos.


Recursion una forma de repeticin

Ing. Elizabeth Vidal 3


La Sentencia if

int nota;
Esta sentencia es
nota = scanner.nextInt() ejecutada si la nota es
menor a 11.
if (nota < 11)

JOptionPane.showMessageDialog(null, Jalado" );

else

JOptionPane.showMessageDialog(null, Aprobado" );

Esta sentencia es
ejecutada si la nota es
11 o mayor.

Ing. Elizabeth Vidal 4


Sintaxis para if
if ( <expresion booleana > )

<bloque then (entonces) >


else

<bloque else (sino)>


Expresin Booleana

if ( nota < 11 )
Bloque
Then JOptionPane.showMessageDialog(null,Jalado" );
entonces
else

Bloque Else JOptionPane.showMessageDialog(null,Aprobado");


sino

Ing. Elizabeth Vidal 5


Flujo de Control del if
false true
nota < 11?

JOptionPane. JOptionPane.
showMessageDialog showMessageDialog
(null, Aprobado"); (null, Jalado");

Ing. Elizabeth Vidal 6


Operadores Relacionales
< //menor que
<= //menor o igual que
== //igual a
!= //diferente de
> //mayor que
>= //mayor o igual que

nota < 80
nota * 2 >= 350
30 < w / (h * h)
x + y != 2 * (a + b)
2 * Math.PI * radius <= 359.99

Ing. Elizabeth Vidal 7


Sentencias Compuestas
Utilice llaves { } si el bloque <then> o <else> tiene
sentencias multiples
if (nota < 11)
{
JOptionPane.showMessageDialog(null,Jalado" );
Bloque
JOptionPane.showMessageDialog(null,
Estudie mas para la prxima"); Then
}
else
{
JOptionPane.showMessageDialog(null, Aprobado" );
JOptionPane.showMessageDialog(null,Siga asi" ); Bloque
} Else

Ing. Elizabeth Vidal 8


Gua de Estilo
if ( <expresion booleana> ) {

} else { Estilo 1

}

if ( <expresion booleana> )
{

Estilo 2
}
else
{

}

Ing. Elizabeth Vidal 9


La sentencia if-then
if ( <expresin booleana> )

<bloque then >

Expresin Booleana

if ( nota >= 18 )

Bloque
JOptionPane.showMessageDialog(null,
Then Aprobado con Honores");

Ing. Elizabeth Vidal 10


Flujo de Control de if-then

true
nota >=18?

JOptionPane.
showMessageDialog (null,
false Aprobado con Honores");

Ing. Elizabeth Vidal 11


La sentencia if-Anidada
Los bloques then y else de una sentencia if
pueden contener cualquier sentencia vlida,
incluyendo otras sentencias if. Una sentencia if
conteniendo otra sentencia if es llamada if-
anidado.
if (notaTeo >= 11) {
if (notaLab > 16) {
System.out.println(Buen trabajo!");
} else {
System.out.println(Aprobado");
}
} else {
System.out.println(Desaprobado");
}
Ing. Elizabeth Vidal 12
Flujo de Control del if-anidado
false true If interno
notaTeo>= 11 ?

false true
messageBox.show notaLab > 16 ?
(Desaprobado");

messageBox.show messageBox.show
(Aprobado"); (Buen Trabajo!");

Ing. Elizabeth Vidal 13


Escribiendo una sentencia if adecuada #1
if (num1 < 0) negativeCount = 0;
if (num2 < 0)
if (num3 < 0)
if (num1 < 0)
negativeCount = 3;
else negativeCount++;
negativeCount = 2; if (num2 < 0)
else negativeCount++;
if (num3 < 0)
if (num3 < 0)
negativeCount = 2;
else negativeCount++;
negativeCount = 1;
else
if (num2 < 0)
if (num3 < 0)
negativeCount = 2;
else
La sentencia
negativeCount = 1;
else negativeCount++;
if (num3 < 0)
negativeCount = 1; incrementa la variable en uno
else
negativeCount = 0;

Ing. Elizabeth Vidal 14


Control if else if
if (nota >= 90)
System.out.print(Su nota es A");

else if (nota >= 80)


Nota Grade System.out.print(Su nota es B");
90 nota A
else if (nota >= 70)
80 nota 90 B System.out.print(Su nota es C");
70 nota 80 C
else if (nota >= 60)
60 nota 70 D System.out.print(Su nota es D");
nota 60 F
else
System.out.print(Su nota es F");

Ing. Elizabeth Vidal 15


Matching else
Son A y B diferentes?

if (x < y) A Ambos A y B significa


if (x < z)
System.out.print("Hello"); if (x < y) {
else if (x < z) {
System.out.print("Good bye"); System.out.print("Hello");
} else {
System.out.print("Good bye");
}
if (x < y) }
B
if (x < z)
System.out.print("Hello");
else
System.out.print("Good bye");

Ing. Elizabeth Vidal 16


Escribiendo una sentencia if
apropiada #2
if (num1 > num2) {
System.out.print(El valor mas largo es");
System.out.println(num1);
System.out.println("Bye.");
} else {
System.out.print(El valor mas largo es");
System.out.println(num2);
System.out.println("Bye.");
}
Mueva las sentencias
comunes fuera del if.

System.out.print(El valor mas largo es");


if (num1 > num2)
System.out.println(num1);
else
System.out.println(num2);
System.out.println("Bye.");

Ing. Elizabeth Vidal 17


Operadores Booleanos
Un operador booleano toma valores booleanos
como sus operandos y retorna un valor booleano.
Los tres operadores booleanos son:
and: &&
or: ||
not !

if (temperature >= 15 && distanceToDestination < 2) {


System.out.println(Vamos a caminar!");
} else {
System.out.println(Vamos a Manejar!");
}

Ing. Elizabeth Vidal 18


Semantica de los Operadores
Booleanos
Operadores Booleanos y su signficado:

P Q P && Q P || Q !P
false false false false true
false true false true true
true false false true false
true true true true false

Ing. Elizabeth Vidal 19


Leyes De Morgan
Las leyes de Morgan nos permiten reescribir las
expresiones booleanas en formas:
Regla 1: !(P && Q) !P || !Q

Regla 2: !(P || Q) !P && !Q

!(temp >= 65 && dist < 2)

!(temp >=65) || !(dist < 2) por Regla1

(temp < 65 || dist >= 2)

Ing. Elizabeth Vidal 20


Evaluacin de Circuito-Corto
Considere la siguiente expresion booleana:
x > y || x > z
La expresion es evaluada de izquierda a derecha. Si x> y
es verdadero, no existe la necesidad de evaluar x>z
porque toda la expresion ya es verdadera aun x>z sea
falso.
Para detener la evaluacin una vez que se conoce el
resultado de toda la expresin se llama short-circuit
evaluation.(tambien recibe el nombre de LazyEvaluation)
Que ocurrira si el short-circuit evaluation no se aplica a la
siguiente expresin.
z == 0 || x / z > 20
Ing. Elizabeth Vidal 21
Reglas de Precedencia de Operadores

Ing. Elizabeth Vidal 22


Variables Booleanas (1/3)
El resultado de una expresion boolena es
true o false. Estos son los dos nicos valores
en el tipo de dato boolean.
Podemos declarar variables del tipo de dato
boolean y asignarle un valor.
boolean pass, done;
pass = 70 < x;
done = true;
if (pass) {

} else {

}

Ing. Elizabeth Vidal 23


Variables Booleanas(2/3)
Las variables locales booleanas estan no-
inicializadas por defecto.
boolean esPrimo;
boolean paqueteRecibido;
boolean elementoEncontrado;

esPrimo -
paqueteRecibido -
elementoEncontrado -

Ing. Elizabeth Vidal 24


Variables Booleanas (3/3)
Variables booleanas locales con inicializacin
boolean procede = true;
boolean prefiereAzul = false;
boolean finalizado = true;

procede true
prefiereAzul false
finalizado true

Ing. Elizabeth Vidal 25


Mtodos Booleanos
Un mtodo que retorna un valor booleano
private boolean esValido(int valor) {
if (valor < MAX_PERMITIDO)
return true;
} else
return false;
}
}

if (isValid(30)) {

Puede ser utilizado } else {

}

Ing. Elizabeth Vidal 26


Comparando Objetos
Con tipos de datos primitivos, solo existe una
sola forma de compararlos, pero con objetos
(tipo referencial), tenemos dos formas de
compararlos.
1. Podemos evaluar si dos variables apuntan al mismo
objeto (utilizamos ==), o

2. Podemos evaluar si dos objetos tienen el mismo


contenido

Ing. Elizabeth Vidal 27


Utilizando == con Objectos (Ejemplo 1)
String str1 = new String("Java");
String str2 = new String("Java");

if (str1 == str2) {
System.out.println(Son iguales");
} else {
System.out.println(No son iguales");
}

No son iguales No iguales porque str1


y str2 apuntan a dos
objetos String distintos.

Ing. Elizabeth Vidal 28


Utilizando == con Objetos (Ejemplo 2)
String str1 = new String("Java");
String str2 = str1;

if (str1 == str2) {
System.out.println(Ellos son iguales");
} else {
System.out.println(Ellos no son iguales");
}

Ellos son iguales Son iguales porque


str1 y str2 apuntan al
mismo objeto.

Ing. Elizabeth Vidal 29


Utilizando equals con String
String str1 = new String("Java");
String str2 = new String("Java");

if (str1.equals(str2)) {
System.out.println(Ellos son iguales");
} else {
System.out.println(Ellos no son iguales");
}

Ellos son iguales Son iguales porque


str1 y str2 tienen el
mismo contenido

Ing. Elizabeth Vidal 30


La Semntica de ==

Ing. Elizabeth Vidal 31


En la Creacion de Objetos String

Ing. Elizabeth Vidal 32


El Operador ? :
Puede ser utilizado en lugar de la sentencia condicional
TestExpression ? Expresion1 : Expresion2
TestExpression se evalua primero.
Si esta evalua a verdadero, el valor de la operacin sera
Expresion1; sino sera el valor de Expresion2.
Ejemplo
int min = (input1 <= input2) ? input1: input2;
Esto es equivalente a
int min;
if (input1 <= input2)
min = input1;
else
min = input2;

Ing. Elizabeth Vidal 33


La sentencia switch
String inputStr = JOptionPane.showInputDialog( null,
Semestre (1, 2,3,4):" );
int semestre = Integer.parseInt(inputStr);

switch (semestre) {
Esta sentencia
case 1: System.out.print(Vaya al aula 301"); es ejecutada si
break; el semestre es
igual a 1

case 2: System.out.print(Vaya al aula 302");


break;

case 3: System.out.print(Vaya al aula 201");


break;
Esta sentencia
es ejecutada si
case 4: System.out.print(Vaya al aula 202"); el semestre es
break; igual a 4
}

Ing. Elizabeth Vidal 34


Sintaxis para la sentencia switch (1/2)
switch ( <expresin aritmetica> ) {
<case etiqueta 1> : <case cuerpo 1>

<case etiqueta n> : <case cuerpo n>
}
Expresin aritmtica
switch ( semestre ) {
case 1: System.out.print( Vaya al aula 301" );
break;
etiqueta
Case case 2: System.out.print( Vaya al aula 302" );
break;
case 3: System.out.print( Vaya al aula 201" ); Cuerpo
break; Case

case 4: System.out.print( Vaya al aula 202" );


break;
}

Ing. Elizabeth Vidal 35


Sintaxis para la sentencia switch (2/2)

La expresin aritmtica utilizada en la sentencia


switch debe ser del tipo integral.
Los siguientes tipos son integrales: byte, int,
short, long, chart
Estos no son tipos integrales: float, double

Ing. Elizabeth Vidal 36


switch que no tienen la sentencia
break

true
N ==
1? x = 10;
switch ( N ) {
case 1: x = 10; false
case 2: x = 20; true
N ==
2? x = 20;
case 3: x = 30;
} false
true
N ==
x = 30;
3?

false

Ing. Elizabeth Vidal 37


switch con sentencia break

true
N ==
switch ( N ) { 1? x = 10;

case 1: x = 10;
false break;
break; true
N ==
case 2: x = 20; 2? x = 20;

break;
false break;
case 3: x = 30;
true
N ==
break; 3? x = 30;

}
false break;

Ing. Elizabeth Vidal 38


switch con el bloque default
switch (ranking) {

case 10:
case 9:
case 8: System.out.print(Maestro");
break;

case 7:
case 6: System.out.print(Bueno");
break;

case 5:
case 4: System.out.print("Aprendiz");
break;

default: System.out.print(Error de Ingreso: Dato no valido");


break;
}

Ing. Elizabeth Vidal 39


Dibujando Grficos
El capitulo 5 del libro presenta cuatro clases
estndares de Java relacionadas al dibujo de
figuras geometricas. Ellas son:
java.awt.Graphics
java.awt.Color
java.awt.Point
java.awt.Dimension
Estas clases son utilizadas en el ejercicio a
continuacin.
Por favor referirse al JAVA API para mayores
detalles.
Ing. Elizabeth Vidal 40
Dibujo Simple

Ing. Elizabeth Vidal 41


El efecto de drawRect

Ing. Elizabeth Vidal 42


Ing. Elizabeth Vidal 43
Fin Clase 5

Ing. Elizabeth Vidal 44

Das könnte Ihnen auch gefallen