Está en la página 1de 25

If anidados y Switch

Prof. Lillian Bras

if-else-if

Una instruccin de if que contiene, en el then o en el


else, otra estructura de seleccin es conocida como un
if anidado.
La sintxis de un if anidado sera como sigue:
if (expression)
statement or block
else if (expression)
statement or block
// Put as many else ifs as needed here
else statement or block
Hay que tener mucho cuidado al construir una
estructura de if anidados ya que el compilador va a
emparejar cada else con el if anterior mas cercano.

Flujograma de If anidado

Programa correspondiente al flujograma anterior


import..javax.swing.JOptionPane;
public class TestResults {
public static void main(String[] args) {
int testScore; // Numeric test score
String input; // To hold the user's input
// Get the numeric test score.
input = JOptionPane.showInputDialog("Enter your numeric " +
"test score and I will tell you the grade: ");
testScore = Integer.parseInt(input);
// Display the grade.
if (testScore < 60)
JOptionPane.showMessageDialog(null, "Your grade is F.");
else if (testScore < 70)
JOptionPane.showMessageDialog(null, "Your grade is D.");
else if (testScore < 80)
JOptionPane.showMessageDialog(null, "Your grade is C.");
else if (testScore < 90)
JOptionPane.showMessageDialog(null, "Your grade is B.");
else if (testScore <= 100)
JOptionPane.showMessageDialog(null, "Your grade is A.");
else
// Invalid score
JOptionPane.showMessageDialog(null, "Invalid score.");
System.exit(0);
}
}

if-else Matching

Las llaves son necesarias siempre que


necesitemos que se ejecute mas de una
instruccin en caso de cierto o en caso de
falso(else).
A pesar de que para una sola instruccin
las llaves no son necesarias, muchas
veces es conveniente colocarlas porque
esto puede hacer que la lgica sea mas
clara.
Adems es recomendable indentar los
else de forma que puede identificarse
facilmente a que if pertenece.

if-else Matching
Este else
va con este
if.

Este else
va con este
if.

if (employed == y)
{
if (recentGrad == y)
{
System.out.println("You qualify for the " +
"special interest rate.");
}
else
{
System.out.println("You must be a recent " +
"college graduate to qualify.");
}
}
else
{
System.out.println("You must be employed to qualify.");
}

Operadores Lgicos

Java provee tres operadores lgicos: uno


unario (!) y dos binarios (&& y ||).
Los operadores lgicos de AND(&&) y
OR(| |)se utilizan para combinar
expresiones booleanas.
El operador unario correspondiente al
NOT se utiliza para convertir una
expresin booleana en el valor opuesto.

Operadores lgicos
Operador

&&
||
!

Significado

Efecto

AND

Une dos expresiones booleanas. Ambas tienen que ser


ciertas para que la expresin completa sea cierta.

OR

Une dos expresiones booleanas. Basta con que una


sola de las expresiones sea cierta para que la expresin
completa sea cierta.

NOT

Si este operador es aplicado a una expresin cierta


devuelve falso y si es aplicado a una expresin falsa
devuelve cierto..

Tabla de valores para &&


Expresin 1

Expresin 2

Expresin1 && Expresin2

true

false

false

false

true

false

false

false

false

true

true

true

Tabla de valores para el operador | |


Expresin 1

Expresin 2

Expresin1 | | Expresin2

true

false

true

false

true

true

false

false

false

true

true

true

Tabla de valores para !


Expresin 1

!Expresin1

true

false

false

true

Short Circuit Evaluation

Short Circuit Evaluation corresponde al hecho de


evaluar en una expresin lgica el mnimo necesario.

Si el primer operando de una expresin construida


con AND (&&) es falso inmediatamente se devuelve
un falso sin tan siquiera evaluar el segundo
operando.

En el caso del OR(| |) , tan pronto como se descubre


que uno de los operandos es cierto la expresin es
evaluada como cierta.

Order of Precedence
Orden de
Precedencia

Operadores

( negacin) !

* / %

+ -

< > <= >=

== !=

&&

||

= += -=
*= /= %=

El operador condicional: ?

El operador condicional(?) es un operador


ternario; tiene tres operandos.
Puede ser utilizado para escribir un
enunciado simple que trabaje como un
if-else.
La forma del operador es:
expresin1 ? expresin2 : expresin3

Por ejemplo:
System.out.println(your grade is: +
(score> 60 ? Fail. : Pass.));
x > y ? z = 10 : z = 5;

number = x > 100 ? 20 :50;

Otro tipo de seleccin: switch

El switch permite usar una variable o


expresin de tipo ordinal para determinar
cual instruccin/es se debe ejecutar
segn su contenido.
El switch puede evaluar una variable de
tipo caracter o entero y tomar decisiones
en base a su valor o contenido.

Sintxis del switch


switch (SwitchExpression)
{
case CaseExpression:
// place one or more statements here
break;
case CaseExpression:
// place one or more statements here
break;
// case statements may be repeated
//as many times as necessary
default:
// place one or more statements here
}

Ejemplo de switch
import java.util.Scanner;
public class SwitchDemo{
public static void main(String[] args){
int number;
// A number entered by the user
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter 1, 2, or 3: ");
number = keyboard.nextInt();
// Determine the number entered.
switch (number)
{
case 1:
System.out.println("You entered 1.");
break;
case 2:
System.out.println("You entered 2.");
break;
case 3:
System.out.println("You entered 3.");
break;
default:
System.out.println("That's not 1, 2, or 3!");
}
}
}

Switch

Cada case debe contener una expresin o valor


nico.
case CaseExpression:
// place one or more statements here
break;
Si el contenido de la variable o valor de la
expresin parea con uno de los case, las
instrucciones entre el colon y el enunciado de break
son ejecutadas.
En otras palabras, si hay un case que paree con el
valor dela variable utilizada en el switch, la ejecucin
del programa es transferida a ese case.

switchcase

Si un case no contiene break, entonces


contina ejecutando por el prximo case.

La seccin de default es opcional y ser ejecutada


si no se encuentra ningn case que paree con la
expresin del Switch.

Ejemplo de Switch(sin break)


public static void main(String[] args)
{
int number;
// A number entered by the user
// Create a Scanner object for keyboard input.
Scanner keyboard = new Scanner(System.in);
// Get one of the numbers 1, 2, or 3 from the user.
System.out.print("Enter 1, 2, or 3: ");
number = keyboard.nextInt();
// Determine the number entered.
switch (number)
{
case 1:
System.out.println("You entered 1.");
case 2:
System.out.println("You entered 2.");
case 3:
System.out.println("You entered 3.");
default:
System.out.println("That's not 1, 2, or 3!");
}
}

Switch: Otro ejemplo


System.out.println("Our pet food is available in " +
"three grades:");
System.out.print("A, B, and C. Which do you want " +
"pricing for? ");
input = keyboard.nextLine();
foodGrade = input.charAt(0);
// Display pricing for the selected grade.
switch(foodGrade)
{
case 'a':
case 'A':
System.out.println("30 cents per lb.");
break;
case 'b':
case 'B':
System.out.println("20 cents per lb.");
break;
case 'c':
case 'C':
System.out.println("15 cents per lb.");
break;
default:
System.out.println("Invalid choice.");
}

Para comparar objetos de tipo String:

No podemos usar los operadores de


relacin para comparar dos objetos de
tipo String.(Recuerde que lo que est
almacenado en una variable de tipo String
es una direccin)
Para compararlos tenemos que usar los
mtodos compareTo y equals de la clase
String.

Ejemplo de comparacin de
cadenas de caracteres
public class StringCompare{
public static void main(String [] args){
String name1 = "Mark",
name2 = "Mark",
name3 = "Mary";
// Compare "Mark" and "Mark"
if (name1.equals(name2))
System.out.println(name1 + " and " + name2 +
" are the same.");
else
System.out.println(name1 + " and " + name2 +
" are the NOT the same.");
// Compare "Mark" and "Mary"
if (name1.equals(name3))
System.out.println(name1 + " and " + name3 +
" are the same.");
else
System.out.println(name1 + " and " + name3 +
" are the NOT the same.");
}
}

Mas sobre la comparacin de cadenas

Los mtodos equals y compareTo


son sensitivos a las letras
maysculas y minsculas.
Si queremos comparar dos cadenas
de caracteres que podran
diferenciarse en el tipo de letra y no
queremos considerar esa diferencia
debemos usar equalsIgnoreCase o
compareToIgnoreCase.

Otro ejemplo de comparacin de cadenas

import java.util.Scanner;
public class SecretWord{
public static void main(String[] args){
String input; // To hold the user's input
Scanner keyboard = new Scanner(System.in);
// Prompt the user to enter the secret word.
System.out.print("Enter the secret word: ");
input = keyboard.nextLine();
// Determine whether the user entered the secret word.
if (input.equalsIgnoreCase("PROSPERO"))
System.out.println("Congratulations! You know the " +
"secret word!");
else
System.out.println("Sorry, that is NOT the " +
"secret word!");
}
}

También podría gustarte