232

Capítulo 6 Métodos: un análisis más detallado

 

A las variables de tipo 

Estado

 se les debe asignar sólo una de las tres constantes declaradas en la enumeración 

(línea 11), o se producirá un error de compilación. Cuando el jugador gana el juego, el programa asigna a la 
variable local

 

estadoJuego

 el valor 

Estado.GANO

 (líneas 33 y 54). Cuando el jugador pierde el juego, la aplica-

ción asigna a la variable local 

estadoJuego

 el valor 

Estado.PERDIO

 (líneas 38 y 57). En cualquier otro caso, el 

programa asigna a la variable local 

estadoJuego

 el valor 

Estado.CONTINUA

 (línea 41) para indicar que el juego 

no ha terminado y hay que tirar los dados otra vez.

Buena práctica de programación 6.4

El uso de constantes de enumeración (como 

Estado.GANO

,

Estado.PERDIO

 y 

Estado.CONTINUA

) en vez de valores 

enteros literales (como 0, 1 y 2) puede hacer que los programas sean más fáciles de leer y de mantener.

 

La línea 26 en el método 

jugar

 llama a 

tirarDados

, el cual elige dos valores aleatorios del 1 al 6, muestra 

el valor del primer dado, el del segundo y la suma de los dos dados, y devuelve esa suma. Después el método 

jugar

 entra a la instrucción 

switch

 en las líneas 29 a 45, que utiliza el valor de 

sumaDeDados

 de la línea 26 

para determinar si el jugador ganó o perdió el juego, o si debe continuar con otro tiro. Las sumas de los dados 
que ocasionan que se gane o pierda el juego en el primer tiro se declaran como constantes 

public final static 

int

 en las líneas 14 a 18. Estos valores se utilizan en las etiquetas 

case

 de la instrucción 

switch

. Los nombres 

de los identifi cadores utilizan los términos comunes en el casino para estas sumas. Observe que estas constantes, 
al igual que las constantes 

enum

, se declaran todas con letras mayúsculas por convención, para que resalten en el 

programa. Las líneas 31 a 34 determinan si el jugador ganó en el primer tiro con 

SIETE

 (

7

) u 

ONCE

 (

11

). Las líneas 

35 a 39 determinan si el jugador perdió en el primer tiro con 

DOS_UNOS

 (

2

), 

TRES

 (

3

) o 

DOCE

 (

12

). Después del 

primer tiro, si el juego no se ha terminado, el caso 

default

 (líneas 40 a 44) establece 

estadoJuego

 en 

Estado.

CONTINUA

, guarda 

sumaDeDados

 en 

miPunto

 y muestra el punto.

 

 

Si aún estamos tratando de “hacer nuestro punto” (es decir, el juego continúa de un tiro anterior), se ejecuta 

el ciclo de las líneas 48 a 58. En la línea 50 se tira el dado otra vez. Si 

sumaDeDados

 concuerda con 

miPunto

 en la 

línea 53, la línea 54 establece 

estadoJuego

 en 

Estado.GANO

 y el ciclo termina, ya que el juego está terminado. 

En la línea 56, si 

sumaDeDados

 es igual a 

SIETE

 (

7

), la línea 57 asigna el valor 

Estado.PERDIO

 

estadoJuego

 y 

el ciclo termina, ya que se acabó el juego. Cuando termina el juego, las líneas 61 a 64 muestran un mensaje en el 
que se indica si el jugador ganó o perdió, y el programa termina.
 

Observe el uso de varios mecanismos de control del programa que hemos visto antes. La clase 

Craps

, en con-

junto con la clase 

PruebaCraps

,

 utiliza tres métodos: 

main

,

 

jugar

 (que se llama desde 

main

) y 

tirarDados

 (que 

se llama dos veces desde 

jugar

), y las instrucciones de control 

switch

while

if…else

 e 

if

 anidado. Observe 

también el uso de múltiples etiquetas 

case

 en la instrucción 

switch

 para ejecutar las mismas instrucciones para 

las sumas de 

SIETE

 y 

ONCE

 (líneas 31 y 32), y para las sumas de 

DOS_UNOS

TRES

 y 

DOCE

 (líneas 35 a 37).

 

Tal vez se esté preguntando por qué declaramos las sumas de los dados como constantes 

public final sta-

tic int

 en vez de constantes 

enum

. La respuesta está en el hecho de que el programa debe comparar la variable 

int

 llamada 

sumaDeDados

 (línea 26) con estas constantes para determinar el resultado de cada tiro. Suponga que 

declararemos constantes que contengan 

enum

 

Suma

 (por ejemplo, 

Suma.DOS_UNOS

) para representar las cinco 

sumas utilizadas en el juego, y que después usaremos estas constantes en las etiquetas 

case

 de la instrucción 

switch

 (líneas 29 a 45). Hacer esto evitaría que pudiéramos usar 

sumaDeDados

 como la expresión de control de 

la instrucción 

switch

, ya que Java no permite que un 

int

 se compare con una constante de enumeración. Para 

lograr la misma funcionalidad que el programa actual, tendríamos que utilizar una variable 

sumaActual

 de tipo 

Suma

 como expresión de control para el 

switch

. Por desgracia, Java no proporciona una manera fácil de convertir 

un valor 

int

 en una constante 

enum

 específi ca. Podríamos traducir un 

int

 en una constante 

enum

 mediante una 

instrucción 

switch

 separada. Sin duda, esto sería complicado y no mejoraría la legibilidad del programa (lo cual 

echaría a perder el propósito de usar una 

enum

).

6.11 Alcance de las declaraciones

Ya hemos visto declaraciones de varias entidades de Java como las clases, los métodos, las variables y los paráme-
tros. Las declaraciones introducen nombres que pueden utilizarse para hacer referencia a dichas entidades de Java. 
El 

alcance

 de una declaración es la porción del programa que puede hacer referencia a la entidad declarada por 

su nombre. Se dice que dicha entidad está “dentro del alcance” para esa porción del programa. En esta sección 
introduciremos varias cuestiones importantes relacionadas con el alcance. (Para obtener más información sobre 

06_MAQ_CAP_06.indd232

4/19/081:22:20AM