Ayudanos contestando la siguiente encuesta acerca de Videojuegos!
Ir a la encuesta
>

Sesión integradora

Objetivo

Utilizar los conocimientos que tenemos de ciclos para resolver problemas.

Producto a Entregar

Un archivo comprimido con el programa generado en la actividad.

Forma de Trabajo

Equipos

Tiempo estimado

1 hora

Forma de Entrega

Por Blackboard

Recomendaciones

  • Sigue las instrucciones de la actividad y ejercita la lectura crítica.
  • Recuerda que el ciclo while sirve cuando no sabes el número de iteraciones y el ciclo for funciona cuando sí lo sabes.

 

Instrucciones

Paso 1:

Crea una interfaz gráfica con tres páneles. El JPanel está en la paleta y nos permite dividir la interfaz gráfica en secciones. Esto es útil por dos razones, para el usuario final es mucho más intuitivo cuando los controles están agrupados por función y cuando no hay muchos controles juntos, además, como el constructor de ventanas de NetBeans todavía no es un producto completamente terminado entonces es muy complicado poner los controles de ciertas maneras (por ejemplo, poner un control que ocupe el tamaño de toda la ventana y luego varios controles centrados, luego algunos en la izquierda y algunos en la derecha), como el JPanel es un contenedor de controles podemos poner varios JPanel alineados y que dentro de ellos estén los controles para que estos no están alineados.

Para agregar un panel seleccionalo en la paleta:

Puedes ponerle un borde para que se vea más llamativo o para que tenga información sobre los controles que se encuentran dentro haciendo click en el botón que tiene tres puntos de la siguiente foto:

Aparecerá una pantalla como la siguiente en la que puedes controlar la apariencia del borde:

No olvides cambiar el nombre del JPanel en el inspector. El prefijo para los páneles es pnl.

Si haces doble click en el inspector sobre un JPanel puedes editar sólo el panel, lo que te permite poner controles en la posición que tú quieres o te permite ver cómo se va a comportar el panel al cambiar de tamaño. Si quieres regresar a la ventana principal en el inspector selecciona la opción de hasta arriba del árbol que dice [JPanel].

Para cada problema agrega un panel con los controles que se te solicitan para poderlo resolver.

Paso 2:

Existe un problema muy interesante en computación llamado El Problema 3n + 1. Lo que hace este problema interesante es que nadie sabe si existe un número con el que el algoritmo nunca va a terminar de ejecutarse y se queda ciclado permanentemente. El problema es muy sencillo, consiste en leer un número n, si el número es impar entonces n = 3n + 1, si el número es par entonces n = n / 2, después se vuelve a revisar si el número es par o impar. El algoritmo termina cuando n == 1.

Para ayudar a los científicos computacionales en su tarea de investigación agrega a tu interfaz gráfica una caja de texto donde el usuario pueda poner n y el programa calcule cuántos pasos tomará terminar el Problema 3n + 1.

Por ejemplo, para 22 el programa debería indicar que terminó en 16, porque tendríamos

  1. 22 (par, n / 2) =
  2. 11 (impar 3n + 1) =
  3. 34 (par, n / 2) =
  4. 17 (impar 3n + 1) =
  5. 52 (par, n / 2) =
  6. 26 (par, n / 2) =
  7. 13 (impar 3n + 1) =
  8. 40 (par, n / 2) =
  9. 20 (par, n / 2) =
  10. 10 (par, n / 2) =
  11. 5 (impar 3n + 1) =
  12. 16 (par, n / 2) =
  13. 8 (par, n / 2) =
  14. 4 (par, n / 2) =
  15. 2 (par, n / 2) =
  16. 1 (termina en uno)

Por lo tanto tu programa debe mostrar un mensaje que diga que el Problema 3n + 1 terminó en 16 pasos.

Paso 3:

Crea un Bean Form que muestre una cuadrícula de 30 x 10 en que cada rectángulo tenga un color diferente al azar. Para generar un color al azar puedes utilizar el siguiente código:

La clase Random permite generar números al azar mediante sus métodos. El método nextInt() puede recibir un número que representa el límite superior, el límite inferior siempre es 0. Puedes cambiar los valores máximos a otros números y también puedes sumarles algún valor constante para que tus colores sean más homogeneos y se vean un poco mejor, la única condición es que todos los valores no pueden ser menores que 0 ni mayores que 255 (por ejemplo, puedes utilizar rand.nextInt(100) + 155 para obtener valores entre 155 y 255).

Además, el programa deberá calcular el ancho y alto de los rectángulos para que ocupen todo el espacio del Java Bean. Puedes obtener el ancho y alto del Java Bean mediante los siguientes métodos:

Paso 4:

Un amigo nuestro va a ir a las Vegas a probar su suerte dentro de unos meses. A nuestro amigo le gusta mucho jugara los dados, y va a pasar varias horas jugando. El juego que le gusta jugar a nuestro amigo consiste en lanzar dos dados y apostar a que el número va a ser mayor que nueve, menor que cuatro o algún valor intermedio. Nuestro amigo no cree en la probabilidad, por lo que te ha pedido que desarrolles un sistema que le diga a qué número apostar.

El programa debe lanzar los dos dados doscientas veces y mostrar el valor que apareció un mayor número de veces (puedes obtenerlo sacando el promedio de todos los tiros o utilizando variables contador).

Por ejemplo, si en las tiradas salieron los siguientes valores:

  1. 4 + 3 = 7 (Entre 4 y 9)
  2. 6 + 4 = 10 (Mayor que 9)
  3. 3 + 6 = 9 (Entre 4 y 9)
  4. 1 + 2 = 3 (Menor que 4)
  5. 2 + 2 = 4 (Entre 4 y 9)

Entonces debe imprimir que es más conveniente apostar a un número entre 4 y 9.

Paso 5:

Nuestro amigo también está interesado en jugar a las cartas, pero desgraciadamente no sabe inglés, por lo que piensa que podrían tomarle el pelo. Para ayudarlo a conocer las cartas y sus nombres crea la clase Card que tiene dos parámetros, un char con el maso al que pertenece y un int con su valor.

La clase Card debe contar con un constructor que reciba dos parametros: char suit e int value. Los valores que pueden tener estos parámetros son:

  • suit: 'C' para treboles (clubs), 'D' para diamantes (diamonds), 'H' para corazones (hearts) y 'S' para espadas (swords)
  • value: cualquier valor entre 2 y 14.

La clase Card también debe tener getters y setters. Los setters deben realizar validaciones (para el maso sólo se pueden poner los cuatro caracteres ya mencionados y para el valor sólo se pueden poner valores entre 2 y 14), recuerda lanzar un IllegalArgumentException en caso de que los valores no sean válidos.

Por último debes implementar el método toString() que devuelve un String con la representación del objeto (puedes utilizar autocompletar para construir el encabezado del método, pon el cursor en algún lugar en que puedas escribir un método y después presiona ctrl+space y comienza a escribir toString()).

El método toString() debe devolver el nombre completo de la carta, por ejemplo, para al carta con suit == 'H' y value == 3 debe devolver "3 de Corazones". Si el valor está entre 2 y 10 debe devolver el valor numérico, si el valor es 11 debe devolver Joto, si el valor es 12 debe devolver Reina, si el valor es 13 debe devolver Rey y si el valor es 14 debe devolver As. Por ejemplo:

Maso Valor toString()
H 3 3 de Corazones
D 10 10 de Diamantes
C 11 Joto de Treboles
S 14 As de Espadas

Puedes utilizar un switch o varios if para convertir los valores y las letras a String. Recuerda que el switch tiene un caso especial que se ejecuta cuando ningún otro caso se ejecutó llamado default.

Comprime tu carpeta de trabajo y mándala por Blackboard.

Ayudanos a mejorar este laboratorio:

¿Cuál es tu opinión del laboratorio?

(1 - buena; 5 - mala).

1       2       3       4       5
¿Cómo se puede mejorar?
¿Encontraste un error? ¿Cuál?

Ayudanos contestando la siguiente encuesta acerca de Videojuegos!
Ir a la encuesta