Download Chapter 5
Document related concepts
no text concepts found
Transcript
Capítulo 5 Selección ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 1 Objetivos • Implementar control por selección usando sentencias if • Implementar control por selección usando sentencias switch • Escribir expresiones booleanas usando expresiones relacionales y booleanas • Evaluar correctamente expresiones booleanas • Anidar una sentencia if dentro de otras sentencia • Describir cómo se comparan los objetos • Elegir la sentencia de control más apropiada para realizar una tarea La Sentencia if int testScore; testScore = //get test score input if (testScore < 70) JOptionPane.showMessageDialog(null, "You did not pass" ); Esta sentencia se ejecuta si testScore es menor que 70. else JOptionPane.showMessageDialog(null, "You did pass" ); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Esta sentencia se ejecuta si testScore es mayor que 70. 4th Ed Chapter 5 - 3 Sintáxis para la sentencia if if ( <boolean expression> ) <then block> else Expresión booleana <else block> if ( Bloque Then testScore < 70 ) JOptionPane.showMessageDialog(null, "You did not pass" ); else Bloque Else ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. JOptionPane.showMessageDialog(null, "You did pass " ); 4th Ed Chapter 5 - 4 Control de flujo false JOptionPane. showMessageDialog (null, "You did pass"); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. testScore < 70 ? true JOptionPane. showMessageDialog (null, "You did not pass"); 4th Ed Chapter 5 - 5 Operadores Relacionales < //menor que <= //menor que o igual que == //igual a != //no igual a (diferente de) > //mayor que >= //mayor o igual a testScore < 80 testScore * 2 >= 350 30 < w / (h * h) x + y != 2 * (a + b) 2 * Math.PI * radius <= 359.99 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 6 Sentencias • Usar llaves si los bloques <then> or <else> tienen más de una sentencia, sino es opcional if (testScore < 70) { JOptionPane.showMessageDialog(null, "You did not pass“ ); Bloque Then JOptionPane.showMessageDialog(null, “Try harder next time“ ); } else { JOptionPane.showMessageDialog(null, “You did pass“ ); Bloque Else JOptionPane.showMessageDialog(null, “Keep up the good work“ ); } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 7 Guia de Estilo if ( <boolean expression> ) { … } else { Estilo 1 … } if ( <boolean expression> ) { … Estilo 2 } else { … } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 8 Sentencia if-then if ( <boolean expression> ) <then block> Expresión Booleana if ( Bloque Then ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. testScore >= 95 ) JOptionPane.showMessageDialog(null, "You are an honor student"); 4th Ed Chapter 5 - 9 Control de flujo de if-then testScore >= 95? false ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. true JOptionPane. showMessageDialog (null, "You are an honor student"); 4th Ed Chapter 5 - 10 Sentencias if anidadas • Los bloques de then y else de una sentencia pueden contener cualquier sentencia válida, incluyendo otra sentencia if • En ese caso recibe el nombre de anidada if (testScore >= 70) { if (studentAge < 10) { System.out.println(“Hiciste un buen trabajo"); } else { System.out.println(“Aprobaste"); //test score >= 70 } //and age >= 10 } else { //test score < 70 System.out.println(“No Aprobaste"); } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 11 Flujo de control de sentencias if anidadas false messageBox.show ("You did not pass"); true testScore >= 70 ? false messageBox.show ("You did pass"); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. studentAge < 10 ? inner if true messageBox.show ("You did a great job"); 4th Ed Chapter 5 - 12 Escribiendo un control if apropiado Fc. Cuántos de los 3 números son negativos if (num1 < 0) negativeCount = 0; if (num2 < 0) if (num3 < 0) negativeCount = 3; if (num1 < 0) negativeCount++; else negativeCount = 2; else if (num3 < 0) negativeCount = 2; else if (num2 < 0) negativeCount++; if (num3 < 0) negativeCount++; negativeCount = 1; else if (num2 < 0) if (num3 < 0) negativeCount = 2; else negativeCount = 1; La sentencia else if (num3 < 0) negativeCount++; negativeCount = 1; incrementa la variable en uno else negativeCount = 0; ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 13 Control if – else if Control if (score >= 90) System.out.print(“Puntaje A"); Test Score Grade 90 score else if (score >= 80) System.out.print("Puntaje B"); A 80 score 90 B 70 score 80 C 60 score 70 D score 60 F else if (score >= 70) System.out.print("Puntaje C"); else if (score >= 60) System.out.print(" Puntaje D"); else System.out.print(" Puntaje F"); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 14 El else se asocia a la sentencia If más cercana, usar {} en caso de duda Are A and B different? if (x < y) if (x < z) A System.out.print("Hello"); Both A and B means… 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) if (x < z) B } System.out.print("Hello"); else System.out.print("Good bye"); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 15 Operadores Booleanos • Un operaodor booleano toma valores booleanos si sus operandos devuelven un valor booleano • Los 3 operadores son – Y: – O: – No && || ! and or not if (temperature >= 65 && distanceToDestination < 2) { System.out.println("Let's walk"); } else { System.out.println("Let's drive"); } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 16 Semántica de Operadores Booleanos • Operadores booleanos y significado 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 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 17 Leyes de Morgan • Las leyes de Morgan permiten escribir las expresiones booleanas de formas diferentes, permitiendo maneras más sencillas de interpretar Rule 1: !(P && Q) !P || !Q Rule 2: !(P || Q) !P && !Q !(temp >= 65 && dist < 2) !(temp >=65) || !(dist < 2) by Rule 1 (temp < 65 || dist >= 2) ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 18 Evaluación: circuito corto • Consideremos las sig expresión booleana: x > y || x > z • La expresión se evalúa de izq a derecha. Si x > y es verdadero, no es necesario evaluar x > z ya que la expresión entera será verdadera sea ya sea x > z verdadera o no • Interrumpir la evaluación una vez que se puede determinar el resultado se llama evaluación de circuito corto • Que ocurriría si no se realiza la evaluación por el circuito corto con la sig expresión? z == 0 || x / z > 20 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 19 Reglas de precedencia vs usar () ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 20 Variables Booleanas • El resultado de una expresión booleana es verdadero o falso (true false). Estos son los dos valores que puede tomar un dato de tipo boolean. • Los booleanos ocupan 1 bit • Podemos declarar una variable de tipo booleana y asignarle un valor ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. boolean pass, done; pass = 70 < x; done = true; if (pass) { … } else { … } 4th Ed Chapter 5 - 21 Métodos Booleanos • Un método que devuelve un valor booleano: private boolean isValid(int value) { if (value < MAX_ALLOWED) return true; } else { return false; } } Puede usarse como: ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. if (isValid(30)) { … } else { … } 4th Ed Chapter 5 - 22 Comparando Objetos • Para los datos primitivos sólo hay una manera de compararlos, los objetos (datos de tipo referencia) se pueden comparar de dos formas: 1. Verificar que las dos variables apunten al mismo objeto (usando ==) o 2. Verificar si ambos objetos tienen el mismo contenido ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 23 Usando== con objetos (ej 1) String str1 = new String("Java"); String str2 = new String("Java"); if (str1 == str2) { System.out.println("They are equal"); } else { System.out.println("They are not equal"); } They are not equal Son diferentes porque ambas variables apuntan a objetos != Puesto que el contenido de un dato de referencia es una dirección de mem ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 24 Usando == con objetos (ej 2) String str1 = new String("Java"); String str2 = str1; if (str1 == str2) { System.out.println("They are equal"); } else { System.out.println("They are not equal"); } They are equal ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Es igual ambos apuntan al mismo objeto 4th Ed Chapter 5 - 25 Usando igual con String String str1 = new String("Java"); String str2 = new String("Java"); if (str1.equals(str2)) { System.out.println("They are equal"); } else { System.out.println("They are not equal"); } They are equal Son iguales pues tienen la misma secuencia de caracteres. La comparación de String es sensible a mayúscula minúscula (case sensitive)se puede usar el método equalsIgnoreCase ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 26 La semántica de == ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 27 Creando Objetos String ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 28 La sentencia switch int gradeLevel; gradeLevel = JOptionPane.showInputDialog(“Nivel (Frosh-1,Soph-2,...):" ); switch (gradeLevel) { case 1: System.out.print("Go to the Gymnasium"); break; Se ejecuta esta sentencia si gradeLevel es igual a 1 case 2: System.out.print("Go to the Science Auditorium"); break; case 3: System.out.print("Go to Harris Hall Rm A3"); break; case 4: System.out.print("Go to Bolt Hall Rm 101"); break; Se ejecuta esta sentencia si gradeLevel es igual a 4 } La variable gradeLevel se llama variable de control puede se int o 4 Ed Chapter 5 - 29 char ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. th Sintáxis para la sentencia switch switch ( <arithmetic expression> ) { <case label 1> : <case body 1> … <case label n> : <case body n> } Expresión Aritmética switch ( gradeLevel ) { case 1: System.out.print("Go to the Gymnasium"); break; Case Label case 2: System.out.print("Go to the Science Auditorium"); break; case 3: System.out.print("Go to Harris Hall Rm A3"); break; Case Body case 4: System.out.print("Go to Bolt Hall Rm 101"); break; } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 30 switch sin sentecias break switch ( N ) { case 1: x = 10; case 2: x = 20; case 3: x = 30; } N == 1? false N == 2? true x = 10; true x = 20; false N == 3? true x = 30; false ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 31 switch con sentencias break switch ( N ) { case 1: x = 10; break; case 2: x = 20; break; case 3: x = 30; break; } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. N == 1? false N == 2? true x = 10; break; true x = 20; false N == 3? false break; true x = 30; break; 4th Ed Chapter 5 - 32 Switch con el Bloque por defecto switch (ranking) { case 10: case 9: case 8: System.out.print("Master"); break; case 7: case 6: System.out.print("Journeyman"); break; case 5: case 4: System.out.print("Apprentice"); break; default: System.out.print("Input error: Invalid Data"); break; } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 33 Dibujando Gráficos • Clases estándard relacionadas con el dibujo de formas geométricas. – – – – java.awt.Graphics java.awt.Color java.awt.Point java.awt.Dimension • Revisar Java API para más detalles ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 34 Ej Dibujo de un rectángulo ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 35 El efecto de drawRect ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 36 Definición del Problema • Problem statement: Escribir una aplicación que simule un protector de pantalla dibujando varias formas geométricas de diferentes formas y colores. El usuario tiene la opción de elegir el tipo de figura (elipse o rectángulo), color y movimiento ( estacionario, aleatorio, inmóvil) ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 37 Plan General • Tareas: – – – – Obtener la forma que el usuario desea Obtener el color Obtener el tipo de movimiento Comenzar el dibujo ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 38 Clases Requiridas Ch5DrawShape JOptionPane standard class DrawingBoard class we implement ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. DrawableShape helper class given to us 4th Ed Chapter 5 - 39 Desarrollo • Desarrollaremos esto en 6 pasos: 1. Comenzamos con una plantilla del programa.Vemos la clase DrawingBoard 2. Definir una clase DrawableShape experimental que dibuje una forma ficticia 3. Agregar código para permitirle al usuario elegir una forma. Extender la clase DrawableShape y las otras en caso necesario 4. Agregar código que le permita al usuario especificar un color. Add code to allow the user to specify the color. Extender la clase DrawableShape y las otras en caso necesario 5. Agregar código que le permita al usuario especificar el tipo de movimiento deseado. Extender la clase DrawableShape y las otras en caso necesario 6. Finalizar programa ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 40 Paso 1 Diseño • Los métodos de la clase DrawingBoard – public void addShape(DrawableShape shape) Agrega una forma a DrawingBoard.No hay un límite de la cantidad de formas que se pueden agregar public void setBackground(java.awt.Color color) Pone el color de fondo de la ventana al color elegido public void setDelayTime(double delay) Pone el tiempo de retardo (delay) entre dibujos en seg public void setMovement(int type) Pone el tipo de movimiento a STATIONARY, RANDOM, or SMOOTH public void setVisible(boolean state) Pone la ventana a visible public void start( ) Comienza a dibujar y agregar formas usando el tipo de movimiento elegido y el retardo ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 41 Paso 1 Código Directory: Chapter5/Step1 Source Files: Ch5DrawShape.java ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 42 Paso 1 Test • Corremos el programa para verificar que una ventana DrawingBoard con fondo negro se muestre toda la pantalla ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 43 Paso 2 Diseño • Definir una clase DrawableShape preliminar • Los métodos necesarios para esta son: – public void draw(java.awt.Graphics g) Dibuja una forma del objeto g. – public java.awt.Point getCenterPoint( ) Retorna el punto central de esta forma – public java.awt.Dimension getDimension( ) Retorna los límites rectangulares de esta forma – public void setCenterPoint(java.awt.Point pt) Coloca el punto central de la forma a pt. ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 44 Paso 2 Código Directory: Chapter5/Step2 Source Files: Ch5DrawShape.java DrawableShape.java ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 45 Paso 2 Test • Compilar y correr el programa varias veces • Confirmar los tipos de movimiento STATIONARY, RANDOM, and SMOOTH. • Probar con distintos tiempos de retardo • Experimentar con diferentes colores de fondo ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 46 Paso 3 Diseño • Extendemos la clase main para permitirle al usuario elegir una forma • Daremos tres opciones de forma: elipse, rectángulo y rectángulo redondeado • Tambien necesitamos rutinas para que el usuario ingrese la informacion de tamaño y punto central. El punto central determina donde se va a dibujar la forma sobre DrawingBoard. • Los 3 métodos para ingresar la información son: private int private Dimension private Point ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. inputShapeType( ) inputDimension( ) inputCenterPoint( ) 4th Ed Chapter 5 - 47 Paso 3 Código Directory: Chapter5/Step3 Source Files: Ch5DrawShape.java DrawableShape.java ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 48 Paso 3 Test • Correr e programa con diferentes valores de ingreso y comprobar los resultados • Intentar ingresos válidos e inválidos y confirmar que la respuesta sea la aporpiada ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 49 Paso 4 Diseño • Extender la clase main para permitirle al usuario elegir un color • Le permitiremos al usuario elegir uno de los 5 colores • EL método de ingreso de color es: private Color inputColor( ) ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 50 Paso 4 Código Directory: Chapter5/Step4 Source Files: Ch5DrawShape.java DrawableShape.java ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 51 Paso 4 Test • Correr el programa con distintos colores • Probar con ingresos válidos e inválidos ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 52 Paso 5 Diseño • Extender la clase main para permitirle al usuario elegir el tipo de movimiento • Permitiremos uno de los 3 posibles movimientos • El método para ingresar el movimiento es: private int inputMotionType( ) ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 53 Paso 5 Código Directory: Chapter5/Step5 Source Files: Ch5DrawShape.java DrawableShape.java ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 54 Paso 5 Test • Correr el programa varias veces con distinto tipo de movimiento. • Intentar con ingresos válidos e inválidos ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 55 Paso 6: Finalizar • Posible Extensiones – – – – Transformar la forma del objeto Cambiar el color del objet Dibujar multiples objetos Dibujar texto que se desplace ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 5 - 56