250 likes | 428 Views
If anidados y Switch. Prof. Lillian Bras. if - else - if. Una instrucción de if que contiene, en el then o en el else, otra estructura de selección es conocida como un if anidado. La sintáxis de un if anidado sería como sigue: if ( expression ) statement or block
E N D
If anidados y Switch Prof. Lillian Bras
if-else-if • Una instrucción de if que contiene, en el then o en el else, otra estructura de selección es conocida como un if anidado. • La sintáxis de un if anidado sería 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.
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 instrucción en caso de cierto o en caso de falso(else). • A pesar de que para una sola instrucción las llaves no son necesarias, muchas veces es conveniente colocarlas porque esto puede hacer que la lógica sea mas clara. • Además es recomendable indentar los else de forma que puede identificarse facilmente a que if pertenece.
if-else Matching 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."); } Este else va con este if.
Operadores Lógicos • Java provee tres operadores lógicos: uno unario (!) y dos binarios (&& y ||). • Los operadores lógicos de AND(&&) y OR(| |)se utilizan para combinar expresiones booleanas. • El operador unario correspondiente al NOT se utiliza para convertir una expresión booleana en el valor opuesto.
“Short Circuit Evaluation” • “Short Circuit Evaluation” corresponde al hecho de evaluar en una expresión lógica el mínimo necesario. • Si el primer operando de una expresión 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 expresión es evaluada como cierta.
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: expresión1 ? expresión2 : expresión3 • 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 selección: switch • El switch permite usar una variable o expresión de tipo ordinal para determinar cual instrucción/es se debe ejecutar según su contenido. • El switch puede evaluar una variable de tipo caracter o entero y tomar decisiones en base a su valor o contenido.
Sintáxis 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 expresión o valor único. case CaseExpression: // place one or more statements here break; • Si el contenido de la variable o valor de la expresión 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 ejecución del programa es transferida a ese case.
switch…case • Si un case no contiene break, entonces continúa ejecutando por el próximo case. • La sección de default es opcional y será ejecutada si no se encuentra ningún case que paree con la expresión 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 relación para comparar dos objetos de tipo String.(Recuerde que lo que está almacenado en una variable de tipo String es una dirección) • Para compararlos tenemos que usar los métodos compareTo y equals de la clase String.
Ejemplo de comparación 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 comparación de cadenas • Los métodos equals y compareTo son sensitivos a las letras mayúsculas y minúsculas. • Si queremos comparar dos cadenas de caracteres que podrían diferenciarse en el tipo de letra y no queremos considerar esa diferencia debemos usar equalsIgnoreCase o compareToIgnoreCase.
Otro ejemplo de comparación 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!"); } }