Instrucción de selección múltiple switch. Java cuenta con la instrucción switch de selección múltiple para realizar distintas acciones, con base en os posibles valores de una variable o expresión entera. Cada acción se asocia con un valor de una expresión entera. Cada acción se asocia con un valor de una instrucción entera constante (es decir, un valor constante de tipo byte, short, int o char, pero no long) que la variable o expresión en la que se basa la instrucción switch puede asumir. El siguiente código no solo calcula el promedio de un conjunto de calificaciones numéricas introducidas por el usuario, sino que utiliza una instrucción switch para determinar si cada calificación es el equivalente de A, B, C, D o F, para incrementar el contador de la calificación apropiada. La clase también imprime en pantalla un resumen del número de estudiantes que recibieron cada calificación. Actividades: 1. Compile y ejecute el programa 2. Realice un diagrama de flujo del mismo 3. Identifique y explique cada uno de los métodos con los que esta compuesto el programa 4. En la línea 48 (aprox.) se declara la variable calificación que almacenará la entrada del usuario. Las siguientes líneas piden al usuario que introduzca calificaciones enteras y escriba el indicador de fin de archivo para terminar la entrada. El indicador de fin de archivo es una combinación de teclas dependiente del sistema. Que el usuario introduce para indicar que no hay más datos que introducir. <ctrl> d ó <ctrl> z dependiendo del sistema. Nota: enviar los resultados por e-mail y publicarlos en el blog // LibroCalificaciones.java // La clase LibroCalificaciones usa la instrucción switch para contar las calificaciones A, B, C, D y F. import java.util.scanner; // el programa usa la clase Scanner public class LibroCalificaciones private String nombredelcurso; // nombre del curso que representa este LibroCalificaciones private int total; // suma de las calificaciones private int contadorcalif; // número de calificaciones introducidas private int acuenta; // cuenta de calificaciones A private int bcuenta; // cuenta de calificaciones B private int ccuenta; // cuenta de calificaciones C private int dcuenta; // cuenta de calificaciones D private int fcuenta; // cuenta de calificaciones F // el constructor inicializa nombredelcurso; // las variables de instancia int se inicializan en 0 de manera predeterminada public LibroCalificaciones( String nombre ) nombredelcurso = nombre; // inicializa nombredelcurso } // fin del constructor
// método para establecer el nombre del curso public void establecernombredelcurso( String nombre ) nombredelcurso = nombre; // almacena el nombre del curso } // fin del método establecernombredelcurso // método para obtener el nombre del curso public String obtenernombredelcurso() return nombredelcurso; } // fin del método obtenernombredelcurso // muestra un mensaje de bienvenida al usuario de LibroCalificaciones public void mostrarmensaje() // obtenernombredelcurso obtiene el nombre del curso System.out.printf( "Bienvenido al libro de calificaciones para\n%s!\n\n", obtenernombredelcurso() ); } // fin del método mostrarmensaje // introduce un número arbitrario de calificaciones del usuario public void introducircalif() Scanner entrada = new Scanner( System.in ); int calificacion; // calificación introducida por el usuario System.out.printf( "%s\n%s\n %s\n %s\n", "Escriba las calificaciones enteras en el rango de 0 a 100.", "Escriba el indicador de fin de archivo para terminar la entrada:", "En UNIX/Linux/Mac OS X escriba <ctrl> d y despues oprima Intro", "En Windows escriba <ctrl> z y despues oprima Intro" ); // itera hasta que el usuario introduzca el indicador de fin de archivo while ( entrada.hasnext() ) calificacion = entrada.nextint(); // lee calificacion total += calificacion; // suma calificacion a total ++contadorcalif; // incrementa el número de calificaciones // llama al método para incrementar el contador apropiado incrementarcontadorcalifletra( calificacion ); } // fin de while } // fin del método introducircalif // suma 1 al contador apropiado para la calificación especificada public void incrementarcontadorcalifletra( int calificacion ) // determina cuál calificación se introdujo switch ( calificacion / 10 ) case 9: // calificacion está entre 90 case 10: // y 100 ++acuenta; // incrementa acuenta break; // necesaria para salir del switch case 8: // calificacion está entre 80 y 89 ++bcuenta; // incrementa bcuenta break; // sale del switch case 7: // calificacion está entre0 70 y 79
++ccuenta; // incrementa ccuenta break; // sale del switch case 6: // calificacion está entre 60 y 69 ++dcuenta; // incrementa dcuenta break; // sale del switch default: // calificacion es menor que 60 ++fcuenta; // incrementa fcuenta break; // opcional; de todas formas sale del switch } // fin de switch } // fin del método incrementarcontadorcalifletra // muestra un reporte con base en las calificaciones introducidas por el usuario public void mostrarreportecalif() System.out.println( "\nreporte de calificaciones:" ); // si el usuario introdujo por lo menos una calificación... if ( contadorcalif!= 0 ) // calcula el promedio de todas las calificaciones introducidas double promedio = (double) total / contadorcalif; // imprime resumen de resultados System.out.printf( "El total de las %d calificaciones introducidas es %d\n", contadorcalif, total ); System.out.printf( "El promedio de la clase es %.2f\n", promedio ); System.out.printf( "%s\n%s%d\n%s%d\n%s%d\n%s%d\n%s%d\n", "Numero de estudiantes que recibieron cada calificacion:", "A: ", acuenta, // muestra el número de calificaciones A "B: ", bcuenta, // muestra el número de calificaciones B "C: ", ccuenta, // muestra el número de calificaciones C "D: ", dcuenta, // muestra el número de calificaciones D "F: ", fcuenta ); // muestra el número de calificaciones F } // fin de if else // no se introdujeron calificaciones, por lo que imprime el mensaje apropiado System.out.println( "No se introdujeron calificaciones" ); } // fin del método mostrarreportecalif } // fin de la clase LibroCalificaciones
La clase prueba de calificaciones, crea un objeto LibroCalificaciones. Qué invoca el método introducircalif del objeto para imprimir en pantalla un mensaje de bienvenida para el usaurio. Etc. Actividades. 1. Compile y ejecute el programa 2. Realice un diagrama de flujo del mismo 3. Identifique y explique cada uno de los métodos con los que esta compuesto el programa y asócielo con el proceso anterior. Nota: enviar los resultados por e-mail y publicarlos en el blog // PruebaLibroCalificaciones.java // Crea objeto LibroCalificaciones, introduce las calificaciones y muestra un reporte. public class PruebaLibroCalificaciones public static void main( String args[] ) // crea objeto LibroCalificaciones llamado milibrocalificaciones y // pasa el nombre del curso al constructor LibroCalificaciones milibrocalificaciones = new LibroCalificaciones( "CS101 Introduccion a la programacion en Java" ); milibrocalificaciones.mostrarmensaje(); // muestra un mensaje de bienvenida milibrocalificaciones.introducircalif(); // lee calificaciones del usuario milibrocalificaciones.mostrarreportecalif(); // muestra reporte basado en las calificaciones } // fin de main } // fin de la clase PruebaLibroCalificaciones
Instrucciones break y continue Cuando break se ejecuta en una instrucción while, for, do while, o switch, ocasiona la salida inmediata de esa instrucción. La ejecución continúa con la primera instrucción después de la instrucción de control. Los usos comunes de break son para escapar anticipadamente del ciclo, o para omitir el resto de una instrucción switch. // PruebaBreak.java // La instrucción break para salir de una instrucción for. public class PruebaBreak public static void main( String args[] ) int cuenta; // la variable de control también se usa cuando termina el ciclo for ( cuenta = 1; cuenta <= 10; cuenta++ ) // itera 10 veces if ( cuenta == 5 ) // si cuenta es 5, break; // termina el ciclo System.out.printf( "%d ", cuenta ); } // fin de for System.out.printf( "\nsalio del ciclo en cuenta = %d\n", cuenta ); } // fin de main } // fin de la clase PruebaBreak Actividades. 1. Compile y ejecute el programa 2. Realice un diagrama de flujo del mismo 3. Identifique y explique cada uno de los métodos con los que esta compuesto el programa. Nota: enviar los resultados por e-mail y publicarlos en el blog
Instrucción Continue Cuando la instrucción continue se ejecuta en una instrucción while, for o do while, omite las instrucciones restantes en el cuerpo del ciclo y continúa con la siguiente iteración del ciclo. En las instrucciones while y do while, la aplicación evalúa la prueba de continuación de ciclo justo después de que se ejecuta la instrucción continue. // PruebaContinue.java // Instrucción continue para terminar una iteración de una instrucción for. public class PruebaContinue public static void main( String args[] ) for ( int cuenta = 1; cuenta <= 10; cuenta++ ) // itera 10 veces if ( cuenta == 5 ) // si cuenta es 5, continue; // omite el resto del código en el ciclo System.out.printf( "%d ", cuenta ); } // fin de for System.out.println( "\nse uso continue para omitir imprimir 5" ); } // fin de main } // fin de la clase PruebaContinue Actividades. 1. Compile y ejecute el programa 2. Realice un diagrama de flujo del mismo 3. Identifique y explique cada uno de los métodos con los que esta compuesto el programa Nota: enviar los resultados por e-mail y publicarlos en el blog
Operadores Lógicos Es siguiente programa demuestra el uso de los operadores lógicos y lógicos booleanos; para ello produce una tabla de verdad. Los resultados muestran la expresión que se evalúo y el resultado boolean de esa expresión. Los valores de las expresiones boolean se muestran mediante printf, usando el especificador de formato %b, que imprime la palabra true o false, con base en el // OperadoresLogicos.java // Los operadores lógicos. public class OperadoresLogicos public static void main( String args[] ) // crea tabla de verdad para el operador && (AND condicional) System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", "AND condicional (&&)", "false && false", ( false && false ), "false && true", ( false && true ), "true && false", ( true && false ), "true && true", ( true && true ) ); // crea tabla de verdad para el operador (OR condicional) System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", "OR condicional ( )", "false false", ( false false ), "false true", ( false true ), "true false", ( true false ), "true true", ( true true ) ); // crea tabla de verdad para el operador & (AND lógico booleano) System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", "AND logico booleano (&)", "false & false", ( false & false ),
"false & true", ( false & true ), "true & false", ( true & false ), "true & true", ( true & true ) ); // crea tabla de verdad para el operador (OR inclusivo lógico booleano) System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", "OR inclusivo logico booleano ( )", "false false", ( false false ), "false true", ( false true ), "true false", ( true false ), "true true", ( true true ) ); // crea tabla de verdad para el operador ^ (OR exclusivo lógico booleano) System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", "OR exclusivo logico booleano (^)", "false ^ false", ( false ^ false ), "false ^ true", ( false ^ true ), "true ^ false", ( true ^ false ), "true ^ true", ( true ^ true ) ); // crea tabla de verdad para el operador! (negación lógica) System.out.printf( "%s\n%s: %b\n%s: %b\n", "NOT logico (!)", "!false", (!false ), "!true", (!true ) ); } // fin de main } // fin de la clase OperadoresLogicos Actividades. 1. Compile y ejecute el programa 2. Realice un diagrama de flujo del mismo 3. Identifique y explique cada uno de los métodos con los que esta compuesto el programa Nota: enviar los resultados por e-mail y publicarlos en el blog
Ejemplo de GUI y gráficos: dibujo de rectángulos y óvalos Aquí se demuestra cómo dibujar rectángulos y óvalos, usando los métodos drawrect y drawoval de Graphics. Se empieza con la declaración de clases para figuras, que extiende a Jpanel. La variable de instancia opción, determina si paintcomponent debe dibujar rectángulos u óvalos. El constructor inicializa opción con el valor que se pasa en el parámetro opcionusuario. El método paintcomponent realiza el dibujo actual. Se debe recordar que la primera instrucción en el método paintcomponent debe ser llamada a super.paintcomponent. Con la instrucción switch se elige entre dibujar rectángulos y óvalos. El método drawrect requiere cuatro argumentos. Los primeros dos representan las coordenadas x y y, de la esquina superior izquierda del rectángulo; las siguientes dos representan la altura y anchura del rectángulo. En este ejemplo, se empieza en la posición 10 píxeles hacia abajo y 10 pixeles a la derecha de la esquina superior izquierda, y cada iteración del ciclo avanza la esquina superior izquierda otros 10 pixeles hacia abajo y a la derecha. La anchura y la altura del rectángulo empiezan en 50 pixeles, y se incrementan por 10 pixeles en cada iteración. // Figuras.java // Demuestra cómo dibujar distintas figuras. import java.awt.graphics; import javax.swing.jpanel; public class Figuras extends JPanel private int opcion; // opción del usuario acerca de cuál figura dibujar // el constructor establece la opción del usuario public Figuras( int opcionusuario ) opcion = opcionusuario; } // fin del constructor de Figuras // dibuja una cascada de figuras, empezando desde la esquina superior izquierda public void paintcomponent( Graphics g ) super.paintcomponent( g ); for ( int i = 0; i < 10; i++ ) // elije la figura con base en la opción del usuario switch ( opcion ) case 1: // dibuja rectángulos g.drawrect( 10 + i * 10, 10 + i * 10, 50 + i * 10, 50 + i * 10 ); break; case 2: // dibuja óvalos g.drawoval( 10 + i * 10, 10 + i * 10, 50 + i * 10, 50 + i * 10 ); break; } // fin del switch
} // fin del for } // fin del método paintcomponent } // fin de la clase Figuras // PruebaFiguras.java // Aplicación de prueba que muestra la clase Figuras. import javax.swing.jframe; import javax.swing.joptionpane; public class PruebaFiguras public static void main( String args[] ) // obtiene la opción del usuario String entrada = JOptionPane.showInputDialog( "Escriba 1 para dibujar rectangulos\n" + "Escriba 2 para dibujar ovalos" ); int int opcion = Integer.parseInt( entrada ); // convierte entrada en // crea el panel con la entrada del usuario Figuras panel = new Figuras( opcion ); JFrame aplicacion = new JFrame(); // crea un nuevo objeto JFrame aplicacion.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE ); aplicacion.add( panel ); // agrega el panel al marco aplicacion.setsize( 300, 300 ); // establece el tamaño deseado aplicacion.setvisible( true ); // muestra el marco } // fin de main } // fin de la clase PruebaFiguras Actividad. Dibuje 12 círculos concéntricos en el centro de un objeto JPanel. El círculo más interno debe tener un radio de 10 píxeles, y cada círculo sucesivo debe tener un radio de 10 pixeles mayor que el anterior. Empiece por buscar el centro del objeto JPanel. Para obtener la esquina superior izquierda de un círculo, avance un radio hacia arriba y un radio hacia la izquierda partiendo del centro. La anchura y la altura del rectángulo delimitador es el diámetro del circulo (el doble del radio)