lunes, 17 de octubre de 2011

Deitel_Java_7.10 ( Comisión por Ventas)

_____________________________________________________________________________________
7.10 (Comisión por ventas) Utilicele un arreglo unidimensional para resolver el siguiente problema: una compañía paga a sus vendedores por comisión. Los vendedores reciben $200 por semana  más el 9% de sus ventas totales de esa semana. Por ejemplo, un vendedor que acumule $5000 en ventas en una semana recibirá $200 más el 9% de $5000, o un total de $650.00 Escriba una aplicación (utilizando un arreglo de contadores) que determine cuántos vendedores recibieron salarios en cada uno de los siguientes rangos. (Suponga que el salario de cada vendedor su trunca a una cantidad entera):

a) $200-299
b) $300-399
c) $400-499
d) $500-599
e) $600-699
f) $700-799
g) $800-899
h) $900-999
i) $1000
_______________________________________________________________________________________
SOLUCIÓN:
Este archivo debe guardarse con el nombre
public class UsaTrabajadores

public class UsaDeitel_7_10

{  // Abre clase publica UsaDeitel_7_10
public static void main(String args[])
{  //Abre main
Deitel_7_10 miObjeto = new Deitel_7_10();
miObjeto.Recibe();
}  // cierra main
}   //Cierra clase publica UsaDeitel_7_10

Éste código debe guardarse con el nombre Deitel_7_10.java

import java.util.Scanner;
public class Deitel_7_10
{  // Abre clase
private int Trabajadores = 10;  
float ArregloA[] = new float[Trabajadores + 1];
int ArregloB[] = new int[Trabajadores + 1];
int ArregloC[] = new int[11];

public void Recibe()
{  // Abre metodo Recibe
Scanner entrada = new Scanner(System.in);
System.out.printf("\nEste programa recibe los rangos en los que estan");
System.out.printf("\nlos salarios de los %d empleados.\n", Trabajadores);
float ventas;
  
for ( int j = 0; j < Trabajadores; j++ )
{  // Abre for
ArregloC[j] = 0;
}  // Cierra for
for ( int i = 1; i <= Trabajadores; i++ )
{  // Abre for
System.out.printf("\n\n\nIntroduzca las ventas del empleado numero %d  ", i);
ventas = entrada.nextFloat();
ArregloA[i] = ((float)(9)/100)*ventas + 200;
System.out.printf("\nEl salario del empleado %d es: %.2f\n ", i, ArregloA[i]);
ArregloB[i] = (int)(ArregloA[i])/100;
} 
  
for (int k = 1; k <= Trabajadores; k++ )
{
if (ArregloB[k] < 10)
ArregloC[ArregloB[k]]++;
else
ArregloC[Trabajadores]++;
}
for (int j = 2; j < Trabajadores; j++ )
{
System.out.printf("\nHay %d empleados que cobran entre %d", ArregloC[j], (j * 100));
System.out.printf(" y %d pesos.\n", (( j + 1 ) * 100 ) - 1 );
}

System.out.printf("Hay %d empleados que cobran 1000 o mas.\n\n", ArregloC[Trabajadores]);
  
}   // Cierra metodo Recibe

}   // Cierra clase

domingo, 16 de octubre de 2011

Convertir de tipo int a tipo double en Java

Para convertir una variable de tipo double a tipo int basta con colocar la instrucción (int) justo antes del tipo double, como en:

 x = (int)Math.pow(10,x - 1);

que es parte del siguiente programa que genera números aleatorios entre 1 y 9. Hay que tener en cuenta que la parte decimal será truncada.

 import java.util.Random;

 public class Convertir
 {        // Abre clase convertir

 public static void main( String args[])
 {     // Abre main

 Random Aleatorios = new Random();
 int x = 1;
 x = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1)); 

 System.out.printf("\nEl numero x es: %d\n", x);

 }    // Cierra main  
 }        // Cierra clase convertir


De igual manera se procede para convertir un tipo int a tipo double, hay que colocar la orden (double) junto a la variable int. Como en la instrucción:


 System.out.printf("x = %.2f\n", (double)x); 


Que es parte del programa

 public class Convertir
 {  // Abre Convertir
 public static void main(String args[])
 {   // Abre main
 int x = 0;
 System.out.printf("x = %.2f\n", (double)x); 
 }   // Cierra main
 }  // Cierra Convertir

Deitel_Java_6.35 ( Instrucción Asistida por Computadora, Versión Final)


El programa ayuda a practicar operaciones aritméticas.

6.35 En los ejercicios 6.30
al 6.32 se desarrolló un programa de instrucción asistida por computadora para enseñar a un estudiante de escuela primaria cómo multiplicar. Realice las siguientes mejoras:

a) Modifique el programa para que permita al usuario introducir un nivel de capacidad escolar. Un nivel de 1 significa que el programa debe usar sólo números de un dígito en los problemas, un nivel 2 significa que el programa debe utilizar dos dígitos máximo, etcétera.

b) Modifique el programa para permitir al usuario que elija el tipo de problemas aritméticos que desea estudiar. Una opción de 1 significa problemas de suma solamente, 2 significa un problema de resta, 3 significa problemas de multiplicación, 4 significa problemas de división y 5 significa una mezcla aleatoria de problemas de todos estos tipos.
_____________________________________________________________________________________
Solución:
El siguiente código debe guardarse con el nombre UsaDeitel_6_35.java

public class UsaDeitel_6_35
{         // Abre clase publica UsaDeitel_6_35

public static void main(String args[])
{         // Abre main
Deitel_6_35 miObjeto = new Deitel_6_35();

miObjeto.Especificar();
}         // Cierra main

}         // Cierra clase publica UsaDeitel_6_35 

Éste programa debe guardarse con el nombre Deitel_6_35.java

import java.util.Random;
import java.util.Scanner;

enum Estado {SI, NO};
// Las variables de enumeracion llevan el control de si
// el estudiante quiere o no realiza mas ejercicios

public class Deitel_6_35

{         // Abre clase Deitel_6_35

Scanner entrada = new Scanner(System.in);
private int x = 6; // la variable x recibira el numero de cifras
// las posibilidades van de 1 a 5. Se inicializa en 6 para
// entrar al while que aparece para recibirla
private int y = 6; // La variable y recibira el tipo de operacion
/*Los posibles valores van del 1 al 5, y se inicializa
en 6 para entrar en el while en el que se recibe el valor
de esta variable */
private Random Aleatorios = new Random();
private int numero1; //Estos dos numeros son las variables que se sumaran
private int numero2;  // restaran, etc.
private int intentos = 0;
private int aciertos = 0;

///////////////////////////////////////////
// METODO ESPECIFICAR
///////////////////////////////////////////
/*En este metodo se pregunta al alumno si quiere jugar
o seguir jugando, el numero de cifras
que tendran las cantidades con las que trabajara
( 1, 1 cifra; 2, 2 cifras; 3, 3cifras; etc, hasta 5)
y el tipo de operacion aritmetica que se realizara
(1, suma; 2, resta; 3, multiplicacion; 4, division;
5, mezcla aleatoria de todas las anteriores)
El metodo Especificar no recibe parametros, desde aqui se
invoca Generar_Ejercicios */

public void Especificar()
  
{             // Abre metodo Especificar
int i;  // variable auxiliar
Estado continuar = Estado.SI;
// La variable tipo Estado se declara como continuar,
// en el entendido de que si el alumno corre el programa
// es porque quiere practicar por lo menos una vez

System.out.println("\nBienvenido! Este programa te ayudara a realizar ejercicios");
System.out.print(" de aritmetica de acuerdo a tu nivel escolar.\n");
   
while (Estado.SI == continuar)
// Este while se ejecuta mientras el alumno quiera seguir practicando
{          // Abre while
x = 6;
y = 6;

while( 5  < x || 1 > x )
{
System.out.print("\nPor favor introduce el numero de cifras para los numeros(1 a 5): ");
x = entrada.nextInt();
}

while( 5  < y || 1 > y )
{
System.out.print("\nPor favor introduce un numero (1 a 5) ");
System.out.print(" para elegir la operacion: 1 suma, 2 resta, 3 multiplicacion");
System.out.print(" 4 suma y 5 una combinacion aleatoria de las anteriores.\n");
y = entrada.nextInt();
}
   
/*Despues de haber establecido los valores de x & y se invoca el metodo
generar_Ejercicios */

Generar_Ejercicios();

System.out.println("\nQuiere seguir jugando? (1 para Si, otro numero para No)");
i = entrada.nextInt();

if ( 1 == i)
continuar = Estado.SI;

else
continuar = Estado.NO; 
   
}          // Cierra while

System.out.printf("\nEn esta sesión hizo %d intentos,", intentos);
System.out.printf(" de los cuales %d fueron correctos\n", aciertos); 
System.out.printf("\nSu porcentaje de efectividad es: %f\n", (double) aciertos/intentos);
System.out.printf("\nRegrese pronto!\n");
}             // Cierra metodo Especificar

//////////////////////////////////////////////////
// METODO GENERAR_EJERCICIOS
//////////////////////////////////////////////////
/* Este metodo utiliza los dos parametros recibidos
en el metodo Especificacion para  generar el adecuado
ejercicio. Para esto invoca a los metodos Suma, Resta,
Multiplicacion y Division
*/

public void Generar_Ejercicios()
{           // Abre metodo Generar_Ejercicios
int dado;

switch (y)
{   // Abre switch
case 1: 
Suma();
break;
case 2: 
Resta();
break;
case 3:
Multiplicacion();
break;
case 4:
Division();
break;
case 5:
dado = 1 +  Aleatorios.nextInt(4);
switch (dado)
{  // Abre switch anidado
case 1:
Suma();
break;
case 2:
Resta();
break;
case 3:
Multiplicacion();
break;
case 4:
Division();
break;
default:
System.out.println("\nRevise este metodo!");
break;
}  // Cierra switch anidado

break; 
default: 
System.out.println("\nRevise este metodo!");
break;
   
}   // Cierra switch
}           // Cierra metodo Generar_Ejercicios

////////////////////////////////////////////////////
// SUMA
////////////////////////////////////////////////////

public void Suma()
{  // Abre metodo Suma
int auxiliars = 0;
int suma = -1;
numero1 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1));  
numero2 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1));  

do 
{   // Abre do
if (0 != auxiliars)
Anima();
  
intentos++;
System.out.printf("\nCuanto es %d + %d?\n", numero1, numero2);
suma = entrada.nextInt();
auxiliars++;
} while (( numero1 + numero2 != suma ) && (10 > auxiliars));

if ( numero1 + numero2 == suma)
{
Felicita();
aciertos++;
}
else
System.out.println("\nDeberias pedir ayuda a tu profesor con este tipo de problemas.");
}   // Cierra metodo Suma

////////////////////////////////////////////////////
// RESTA
////////////////////////////////////////////////////

public void Resta()
{  // Abre metodo Resta
int auxiliarr = 0;
int resta;
numero1 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1));  
numero2 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1));  

do
{   // Abre while
if (0 != auxiliarr)
Anima();
intentos++;
System.out.printf("\nCuanto es %d - %d?\n", numero1, numero2);
resta = entrada.nextInt();
auxiliarr++;

}while (( numero1 - numero2 != resta) && (10 > auxiliarr));
if ( numero1 - numero2 == resta)
{ 
Felicita();
aciertos++;
}
else
  
System.out.println("\nDeberias pedir ayuda a tu profesor con este tipo de problemas.");

}   // Cierra metodo Resta

////////////////////////////////////////////////////
// MULTIPLICACION
/////////////////////////////////////////////////////

public void Multiplicacion()
{  // Abre metodo Multiplicacion
  
int auxiliarm = 0;
int multiplicacion;
numero1 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1));  
numero2 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1));  

do
{   // Abre while
if ( 0 != auxiliarm)
Anima();
intentos++;
System.out.printf("\nCuanto es %d * %d?\n", numero1, numero2);
multiplicacion = entrada.nextInt();
auxiliarm++;
  
}while( ( numero1 * numero2 != multiplicacion) && (10 > auxiliarm) );

if (numero1 * numero2 == multiplicacion)
{
Felicita();
aciertos++;
}
else
System.out.println("\nDeberias pedir ayuda a tu profesor con este tipo de problemas.");
}     // Cierra metodo multiplicacion

/////////////////////////////////////////////////////
// DIVISION
/////////////////////////////////////////////////////

public void Division()
{       // Abre metodo Division
int division;
int auxiliard = 0;
numero1 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1));  
numero2 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1));  

do
{   // Abre while
if ( 0 != auxiliard)
Anima();
intentos++;
System.out.printf("\nCuanto es %d / %d? (introduzca solo la parte entera) \n", numero1, numero2);
division = entrada.nextInt();
auxiliard++;
}while (( numero1 / numero2 != division) && (10 > auxiliard));
  
if (numero1/numero2 == division)
{
Felicita();
aciertos++;
}
else
System.out.println("\nDeberias pedir ayuda a tu profesor con este tipo de problemas.");
}      // Cierra metodo Division  

/*Este metodo felicita al usuario cuando da una respuesta
correcta*/

///////////////////////////////////////////////
// Metodo Felicita
///////////////////////////////////////////////

void Felicita()
{        // Abre metodo Felicita
int auxiliar; 
auxiliar = 1 + Aleatorios.nextInt(4);
switch (auxiliar) 
{     // Abre switch
case 1:
System.out.println("\nMuy bien!");
break;
case 2:
System.out.println("\nExcelente!");
break;
case 3:
System.out.println("\nBuen trabajo!");
break;
case 4:
System.out.println("\nSigue asi!");
break;
default:
System.out.println("\nRevise el Metodo Felicita!");
break;
}     // Cierra switch
}               // Cierra metodo Felicita

/*El siguiente metodo sirve para "animar" al estudiante
cada vez que cometa un error*/
///////////////////////////////////////////////////
// Metod Anima
///////////////////////////////////////////////////
public void Anima()
{         // Abre Anima
int auxiliar;
auxiliar = 1 + Aleatorios.nextInt(4);

switch (auxiliar) 
{     // Abre switch
case 1:
System.out.println("\nNo. Por favor intenta de nuevo!");
break;
case 2:
System.out.println("\nIncorrecto. Intenta una vez mas!");
break;
case 3:
System.out.println("\nNo te rindas!");
break;
case 4:
System.out.println("\nNo. Sigue intentando!");
break;
default:
System.out.println("\nRevise el Metodo Anima!");
break;
}
}       // Cierra Anima
}         // Cierra clase Deitel_6_35

viernes, 14 de octubre de 2011

Personalizando Vim

Las siguientes instrucciones sirven para personalizar Vim y hacer un mejor uso de las posibilidades que ofrece. Muchas de las opciones que se describen a continuación son "sets", para ver una lista completa de todas las opciones, basta teclear ":set all" en Vim.

Cambiar el fondo. Con las instrucciones ":set background=dark" y ":set background=light" se establecen fondos oscuros y claros.

Syntax on y colorscheme. Vim puede reconocer la sintaxis del lenguaje en que se escribe. Si no está por default, es posible establecerlo con la instrucción ":syntax on", o con "syntax enable", si queremos que se deje de resaltar la sintaxis entonces escribimos ":syntax off". La forma en la que se colorean las palabras reservadas del lenguaje y en general todo el ambiente dependen del colorscheme. Cómo establecer estos comandos se explica un poco mejor en la entrada Syntax on y colorscheme en el editor Vim.

Resaltar línea actual. Con la instrucción ":set cursorline" se subraya la linea actual.


Resaltar columna actual. Con la instrucción ":set cursorcolumn" se resalta la columna actual. 


Numerar lineas. La instrucción ":set number" numera las lineas. La instrucción ":set nonumber" elimina la numeración. 


Cambiar el color de la columna de números. El color de los números en la columna de numeración no cambia con el colorscheme. Para cambiarla basta con escribir ":hi LineNr ctermfg=red" y el color de los números será rojo. red se puede cambiar por cualquier color: yellow, blue, cyan, brown, black, grey. green. También se pueden matizar con darkred, o lightred. Desde luego hay que sustituir red por el color de nuestra preferencia, aunque algunos no aceptan la opción.


Cambiar el fondo de la columna de números. Muy relacionado con la anterior, esta opción permite cambiar el color de fondo de la columna de numeración, que por defecto toma el de la consola. Hay que usar el comando ":hi LineNr ctermbg=red"  y se establecerá en rojo. Claro que, como en el anterior, se puede cambiar red por el color que más nos guste.


Cambiar el ancho de la columna de números: Con ":set nuw=5" se establece el ancho de la columna de numeración en 5 espacios. Se puede sustituir 5 por el número deseado.


Abreviaturas. Con ":ab mn Mi Nombre", cada vez que se teclee en el editor mn se desplegará la cadena Mi Nombre. Con ":ab m" se despliegan todas la abreviaturas que empiezan con m. Para ver todas la abreviaturas use ":ab"


Sangrado Automático. La instrucción ":set autoindent", o ":set ai", se produce el sangrado automático. La instrucción ":set noautoindent", o ":set noai" lo elimina.


Edición en Vim con split
Editar en varias ventanas: Vim permite la edición de dos o más archivos en la misma pantalla. Para dividir la ventana horizontalmente sólo hay que escribir ":split Nombre_Archivo". Para una división   vertical el comando es ":vsplit Nombre_Archivo". Es posible copiar y pegar de un archivo a otro. Para moverse entre los ficheros hay que usar Ctrl + W + flecha de dirección del teclado numérico.


Editar archivo en una línea específica: Este es muy bueno a la hora de programar, ya que el compilador indica siempre en qué linea exacta ha ocurrido el error. Para ir directo a él (supongamos que fue en la linea 125) sólo escribimos ":vim +125 Archivo_a_Editar" y nos manda el cursor directamente a la linea requerida.


Eliminar la campana de error. Es frecuente que cada que se da un esc en modo de edición, la campana suene indicando error. Si llega a ser molesto, se puede evitar con ":set noerrorbells"


Resaltar la palabra buscada. Cuando se busca una cadena, es posible resaltarla con un color distinto al fondo. Esta opción muy útil se logra con ":set hlsearch".


Guardar copia de seguridad. Con ":set backup" se guarda una copia de el archivo que estamos editanto. Para eliminarlo, y si te desagradan los archivos que terminan con ~, basta teclear ":set nobackup".


Exportar como html. Basta usar ":TOhtml", y el nombre del archivo por defecto es NombreActual.html La opción es útil, pero en particular no me gustan las fuentes que quedan establecidas. Los programas de este blog son exportados como html desde Kate, y me parece mucho mejor.


Regresar al estado del archivo hace 5 minutos. Con la instrucción ":earlier 5m" se muestra el archivo tal como era hace 5 minutos. Desde luego se puede cambiar 5 por la cantidad de minutos que se desee. En caso de no haber cambios Vim avisa: "Este es el cambio más antiguo" Para "volver al futuro" basta con teclear ":later 5m". En caso de exceder el tiempo de retraso, se avisa: "Este es el cambio más nuevo".

jueves, 13 de octubre de 2011

Deitel_Java_6.37 ( Juego de Craps en Java)

6.37 Modifique el programa Craps de la figura 6.9 para permitir apuestas. Inicialice la variable saldoBanco con $1000.00. Pida al jugador que introduzca una apuesta. Compruebe que esa apuesta sea menor o igual al saldoBanco y, si no lo es, haga que el usuario vuelva a introducir la apuesta hasta que se introduzca un valor válido. Después de esto, comience un juego de craps. Si el jugador gana reste la apuesta a saldoBanco e imprima el nuevo saldoBanco. Si el jugador pierde, sume la apuesta a saldoBanco e imprima el nuevo saldoBanco. Compruebe si saldoBanco se ha vuelto cero y, de ser así, imprima el mensaje "Lo siento. Se quedó sin fondos." A medida que el juego progrese, imprima varios mensajes para crear algo de "charla", como "Oh, se está yendo a la quiebra, verdad?" o "oh, vamos, arriesguese!", o, "La hizo en grande. Ahora es tiempo de cambiar sus fichas por efectivo!". Implemente la "charla" con un método separado que seleccione de forma aleatoria la cadena a mostrar.



_______________________________________________________________________________
Solución:
Aparentemente la palabra craps proviene de una degeneración de la palabra inglesa crabs que significa sacar un par de unos en el juego de dados.  Para entender las reglas del juego, tal vez sea de utilidad la figura siguiente:

La primera columna representa la suma que se puede obtener al lanzar un par de dados. El número más bajo es dos, el siguiente 3,.... y el mayor 12.  Los extremos de esa columna (1 y 12) tienen menos probabilidades de ocurrir que el resto, ya que sólo hay un par de combinaciones para cada uno (1 y 1, para 2; y 6 y 6, para 12). A esto se refiere la segunda columna. El número formas en que se puede obtener el número de la columna Suma es el que aparece en la siguiente. Para los números que están en medio de 1 y 12, las combinaciones aumenta, hasta llegar a 7, que es el que más posibilidades tiene, con 5 pares. La siguiente columna, Probabilidad, es otra forma de escribir la segunda. Se puede ver esta tabla con la ley de los grandes números, de probabilidad. El valor esperado, cuando se lanza un dado es de 1/6 + 2/6 + 3/6 + 4/6 + 5/6  = 7/2 = 3.5 Así que si se lanzan dos dados, la esperanza es de 3.5 + 3.5 = 7 Así pues, la ley de los grandes números dice que cuando se lanzan dos dados, lo más probable es que el resultado sea 7, su media o valor esperado. Si se lanzan 3 dados, lo más probable será 10.5; si 4, 14; etc. Las reglas del craps dicen que un jugador gana a la primera si obtiene un 7 o un 11, o sea que tiene 6/36 + 2/36 = 2/9 como probabilidad de ganar a la primera. Por otro lado, pierde de inmediato si obtiene 2, 3 o 12, o sea que tiene una probabilidad de 1/36 + 2/36 + 1/36 = 1/9 de perder a la primera. En el primer lanzamiento la suerte favorece al jugador. En el resto de los casos, se obtiene "el punto", y es ahí donde el juego se vuelve a favor de la casa. Las probabilidades totales de ganar en el craps son de 49.2929, mientras que 50.7071 de las veces se pierde. El juego es bastante justo. Comparado con otros juegos de casino, la ruleta, por ejemplo, regresa más al jugador por cada peso que apueste. Sin embargo, a la larga, la casa gana. Esta es la razón por la que el juego de craps tiene unas reglas que parecen complicadas. En realidad ha evolucionado de manera empírica para hacerlo lo más atractivo posible para el jugador, sin que la casa pierda.

El siguiente archivo debe guardarse con el nombre UsaCraps.java


import java.util.Scanner;

 public class UsaCraps
 {      // Abre clase UsaCraps
  private enum Estado {SI, NO}; 

 /////////////////////////////////////////////
 // MAIN
 /////////////////////////////////////////////

 public static void main(String args[])
 {        // Abre main

 Scanner entrada = new Scanner(System.in);
 Craps juego = new Craps();
 int saldoBanco = 1000;
 Estado  continuar;
 continuar = Estado.SI;
 int apuesta = 2*saldoBanco;
 // Con esto se garantiza que la apuesta siempre sera
 // mayor que el saldo, y se entrara al while siguiente
 int x;
 int y;

 System.out.println("\nEste programa simula un juego de Craps.");
 
 while (apuesta > saldoBanco)
 {  // Abre while
 System.out.printf("\nEl banco cuenta con un saldo de  %d, por", saldoBanco);
 System.out.println("favor haga su apuesta: ");
 apuesta =  entrada.nextInt();
 }     // Cierra while

 while (Estado.SI == continuar && 0 < saldoBanco)
 { // Abre while

 x = juego.jugar();

 if (1 == x)
 {       // Abre if
 saldoBanco -= apuesta;
 System.out.printf("Usted gano %d!\n", apuesta);
 juego.ImprimeVictoria();
 }       // Cierra if

 else
 {      // Abre else
 saldoBanco += apuesta;
 System.out.printf("Usted perdio %d ", apuesta);
 juego.ImprimeDerrota();
 }       // Cierra else

 if ( 0 < saldoBanco )
 {  // Abre if
 System.out.println("\nEste programa simula un juego de Craps.");
 System.out.printf("\nEl banco cuenta con un saldo de  %d, por", saldoBanco);
 System.out.println(" favor haga su apuesta o -1 para terminar.");
 y =  entrada.nextInt();
 
 while ( -1 != y &&  y > saldoBanco )
 {       // Abre while
 System.out.printf("\nEl banco cuenta con un saldo de  %d, por", saldoBanco);
 System.out.println(" favor haga su apuesta o -1 para terminar.");
 y =  entrada.nextInt();
 }       // Cierra while
 
 if ( -1 == y )
 continuar = Estado.NO;

 else 
 apuesta = y;
 }       // Cierra if
 }  // Cierra while 
 }        // Cierra main
 }      // Cierra clase UsaCraps


El siguiente código debe guardarse con el nombre Craps.java

import java.util.Random;
 
 public class Craps
 {               // Abre la clase publica Craps
 
 // Crea un generador de numeros aleatorios
 // para usarlo en el metodo TirarDado
 private Random numerosAleatorios = new Random();

 // enumeracion con constantes que representan el estado
 // del juego
 private enum Estado {CONTINUA, GANO, PERDIO}; 

 //constantes que representan tiros comunes del dado
 private final static int DOS_UNOS = 2;
 private final static int TRES = 3;
 private final static int SIETE = 7;
 private final static int ONCE = 11;
 private final static int DOCE = 12;

 ////////////////////////////////////////
 // Metodo Jugar
 ////////////////////////////////////////

 // Ejecutar un juego de Craps
 public int jugar()
 {   // Abre metodo jugar
 
 int miPunto = 0;
 // punto si no gana o pierde en el primer tiro
 Estado estadoJuego;
 // Puede contener CONTINUA, GANA O PERDIO;

 int sumaDeDados = tirarDados();
 // primer tiro de los dados
 
 // determina el estado del juego y el punto
 // en base en el primer tiro
 switch( sumaDeDados )
 {        // Abre switch
 case SIETE: // gana con 7 en el primer tiro
 case ONCE: // gana con once en el primer tiro
 estadoJuego = Estado.GANO;
 break;
 
 case DOS_UNOS: //Pierde con 2 en el primer tiro
 case TRES: //Pierde con 3 en el primer tiro
 case DOCE: // Pierde con 12 en el primer tiro
 estadoJuego = Estado.PERDIO;
 break;
 
 default: // No gano ni perdio, por lo que guarda el punto
 estadoJuego = Estado.CONTINUA; // No ha terminado el juego
 miPunto = sumaDeDados; // guarda el punto
 System.out.printf("El punto es %d\n", miPunto);
 break; // opcional al final del switch

 }        // Cierra switch
 // mientras el juego no este terminado
 while( estadoJuego == Estado.CONTINUA )
 {  // Abre while
 sumaDeDados = tirarDados();
 // determina el estado del juego
 if (sumaDeDados == miPunto)
 estadoJuego = Estado.GANO;
 else
 if (sumaDeDados == SIETE )
 estadoJuego = Estado.PERDIO;

 }   // Cierra while

 //muestra mensaje de que gano o perdio
 if ( estadoJuego == Estado.GANO )
 {  // Abre if
 System.out.println("El jugador gana");
 return 1;
 }    // Cierra if
 else
 {  // Abre else 
 System.out.println("El jugador pierde");
 return -1;
 }      // Cierra else
 }  // Cierra metod jugar

 // tira los dados, calcula la suma
 // y muestra los resultados
 
 public int tirarDados()
 {           // Abre metodo tirarDados
 // elige valores aleatorios para los dados
 int dado1 = 1 + numerosAleatorios.nextInt(6);
 int dado2 = 1 + numerosAleatorios.nextInt(6);
 int suma = dado1 + dado2;
 
 // muestra los resultados de ese tiro
 System.out.printf("El jugador tiro %d + %d = %d\n",
 dado1, dado2, suma);

 return suma;
 }          // Cierra metodo tirarDados

 /////////////////////////////////////////
 // ImprimeDerrota
 /////////////////////////////////////////

 public void ImprimeDerrota()
 {  // Abre metodo ImprimeDerrota
 int  auxiliar = 1 + numerosAleatorios.nextInt( 5 );
 
 switch (auxiliar)
 {  // Abre switch
 case 1:
 System.out.println("\nLo siento. Siga intentando!");
 break;
 case 2:
 System.out.println("\nSi no vuelve a jugar, no se recuperara");
 break;
 case 3:
 System.out.println("\nPronto cambiara su suerte!");
 break;
 case 4:
 System.out.println("\nOh, se esta yendo a la quiebra, verdad?");
 break;
 case 5:
 System.out.println("\nMejor retirese y conserve algo de su dinero!");
 break;
 default:
 System.out.println("\nRevise este metodo!");
 break;
 }        // Cierra switch

 }      // Cierra metodo ImprimeDerrota

 /////////////////////////////////////////
 // ImprimeVictoria
 /////////////////////////////////////////

 public void ImprimeVictoria()
 {  // Abre metodo ImprimeVictoria
 int  auxiliar = 1 + numerosAleatorios.nextInt( 5 );
 
 switch (auxiliar)
 {  // Abre switch
 case 1:
 System.out.println("\nFelicidades!");
 break;
 case 2:
 System.out.println("\nEsta usted acabando con la banca!");
 break;
 case 3:
 System.out.println("\nEsto es una buena racha!");
 break;
 case 4:
 System.out.println("\nHoy es su dia de suerte, verdad?");
 break;
 case 5:
 System.out.println("\nYa puede cambiar sus fichas por mucho dinero!");
 break;
 default:
 System.out.println("\nRevise este metodo!");
 break;
 }        // Cierra switch
 }       // Cierra metod ImprimeVictoria
 }               // Cierra la clase publica Craps


Related Posts Plugin for WordPress, Blogger...