Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Ejercicio Java

  • 2 Respuestas
  • 2120 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado rollth

  • *
  • Underc0der
  • Mensajes: 876
  • Actividad:
    3.33%
  • Reputación 16
  • El conocimiento es libre.
    • Ver Perfil
    • Whateversec
    • Email
  • Twitter: @RoloMijan
« en: Abril 25, 2015, 01:03:23 pm »
Muy buenas gente, como ahora estoy empezando a estudiar java en la uni he pensado en traeros un ejercicio simple que he hecho, es para apostar tirando un dado.

numeroGenerator

Código: Java
  1. import java.util.Random;
  2. /**
  3.  * Genera un numero al azar
  4.  *
  5.  *
  6.  * @1.0
  7.  */
  8. public class numeroGenerator{
  9.  
  10.     private Random generadorAzar;
  11.  
  12.  
  13.     public numeroGenerator(){
  14.         generadorAzar = new Random();
  15.     }
  16.  
  17.  
  18.     public int generarNumero(){
  19.         return generadorAzar.nextInt(6) + 1;
  20.     }
  21. }
  22.  

Dinero
Código: Java
  1. /**
  2.  * Controla el Dinero.
  3.  *
  4.  * @author
  5.  * @version 1.0
  6.  */
  7. public class Dinero{
  8.  
  9.     public int dinero;
  10.  
  11.  
  12.     public Dinero(){
  13.         dinero = 100;
  14.     }
  15.  
  16.  
  17.     public void aumentarDinero(int x){
  18.         dinero = dinero + x;
  19.     }
  20.    
  21.     public void disminuirDinero(int x){
  22.         dinero = dinero - x;
  23.     }
  24. }
  25.  

maquinaDeApuestas
Código: Java
  1. /**
  2.  * Maquina de apuestas con el dado
  3.  *
  4.  *
  5.  * @version 1.0
  6.  */
  7. public class MaquinaDeApuestas{    
  8.     private Dinero dinero;
  9.  
  10.  
  11.     public MaquinaDeApuestas(){
  12.         dinero = new Dinero();
  13.     }
  14.  
  15.  
  16.     public int preguntarDinero(){
  17.         return dinero.dinero;
  18.     }
  19.    
  20.     public void apostar(int apuesta , int numero){
  21.         if ((apuesta <= dinero.dinero) && (apuesta > 0)){
  22.             numeroGenerator generador;
  23.             generador = new numeroGenerator();
  24.             int numero1 = generador.generarNumero();
  25.             System.out.println("Su numero es: " + numero);
  26.             System.out.println("El numero que ha salido en el dado es: " + numero1);
  27.             if (numero == numero1){
  28.                 System.out.println("!HA GANADO¡");
  29.                 dinero.aumentarDinero(apuesta * 6);
  30.             }
  31.             else{
  32.                 System.out.println("Ha perdido...");
  33.                 dinero.disminuirDinero(apuesta);
  34.             }
  35.         }
  36.         else{
  37.             System.out.println("No puede apostar esa cantidad de dinero.");
  38.         }
  39.     }
  40. }
  41.  
« Última modificación: Enero 23, 2016, 11:56:23 pm por rollth »

Desconectado Gus Garsaky

  • *
  • Underc0der
  • Mensajes: 93
  • Actividad:
    0%
  • Reputación -1
    • Ver Perfil
  • Skype: gus.garsaky
« Respuesta #1 en: Abril 25, 2015, 03:09:15 pm »
Muy bueno, rollth. Te recomendaría que apliques otra capa de abstracción y separes el objeto Dinero del proceso y apliques el encapsulamiento (es muy importante).

Por cuestiones de seguridad e integridad de datos, nunca se debe acceder a las variables de un objeto directamente. Ésto puede tener problemas si accidentalmente se cambia (ya que es visible desde cualquier contexto), el resultado final puede variar mucho.

Se me ocurre también crear un método play(), que inicie y controle el juego y que además, sea recursivo para controlar posibles excepciones como NumberFormatException. Además, lanzaríamos un IllegalAccessException si se escoje un número fuera del rango 1 - 6 para poder reiniciar el juego.

Modificando algo tu code, quedaría así:

Código: Java
  1. public class Generator {
  2.         public static Integer generate() {
  3.                 Random random = new Random(System.nanoTime());
  4.                 return 1 + random.nextInt(6);
  5.         }
  6. }

Código: Java
  1. public class Cash {
  2.         private Double quantity;
  3.  
  4.         public Cash() {
  5.  
  6.         }
  7.         public Cash(Double quantity) {
  8.                 this.quantity = quantity;
  9.         }
  10.         public Double getQuantity() {
  11.                 return quantity;
  12.         }
  13.         public void setQuantity(Double quantity) {
  14.                 this.quantity = quantity;
  15.         }
  16. }

Código: Java
  1. public class CashManager {
  2.         public static void increase(Cash cash, Double quantity) {
  3.                 dinero.setQuantity(dinero.getQuantity() + quantity);
  4.         }
  5.         public static void decrease(Cash cash, Double quantity) {
  6.                 dinero.setQuantity(dinero.getQuantity() - quantity);
  7.         }
  8. }

Código: Java
  1. public class Machine {
  2.         private Cash cash;
  3.  
  4.         public setCash(Double amount) {
  5.             cash = new Cash(amount);
  6.         public Double checkCash() {
  7.                 return cash.getQuantity();
  8.         }
  9.         public void bet(Double betSize , int choosedNumber){
  10.                 if(choosedNumber < 1) {
  11.                         System.out.println("Elija un número válido");
  12.                         return;
  13.                 }
  14.                 if(betSize < checkCash()) {
  15.                         System.out.println("Solo dispone de: "checkCash());
  16.                         return;
  17.                 }
  18.         int generatedNumber = Generator.generate();
  19.         System.out.println("Su numero es: " + choosedNumber);
  20.         System.out.println("El numero que ha salido en el dado es: " + generatedNumber);
  21.         (generatedNumber == choosedNumber) ? win(betSize) : lose(betSize);
  22.     }
  23.     public void play() {
  24.         try {
  25.                 System.out.println("*** EMPIEZA EL JUEGO... ***\n\n"):
  26.                 while(checkCash() > 0) {
  27.                                 System.out.print("\nElija su número (1 al 6): ");
  28.                                 Integer number = reader.nextInt();
  29.                                 if(number < 0 || number > 6) {
  30.                                         throw new IllegalAccessException("Elija un número entre 1 y 6!");
  31.                                 }
  32.                                 System.out.print("\nIngrese el monto de apuesta: ");
  33.                                 Double betSize = reader.nextDouble();
  34.                                 bet(betSize, number);
  35.                         }
  36.                 } catch(NumberFormatException e) {
  37.                         System.out.println("\nDebe ingresar un número");
  38.                         play(); // volvemos a pedir número, (método recursivo)
  39.                 } catch(IllegalAccessException e2) {
  40.                         System.out.println(e.getMessage());
  41.                         play();
  42.                 }
  43.     }
  44.     private void win(Double betSize) {
  45.         System.out.println("!HA GANADO¡");
  46.         DineroManager.increase(cash, betSize * 6);
  47.     }
  48.     private void lose(Double betSize) {
  49.         System.out.println("Ha perdido...");
  50.         DineroManager.decrease(cash, betSize);
  51.     }
  52. }

Código: Java
  1. public class Main {
  2.         public static void main(String[] args) {
  3.                 Scanner reader = new Scanner(System.in);
  4.                 System.out.print("Ingrese el monto inicial: ");
  5.                 Double amount = reader.nextDouble();
  6.                 Machine machine = new Machine();
  7.                 machine.setCash(amount);
  8.                 machine.play();
  9.         }
  10. }

Un saludo.
« Última modificación: Abril 26, 2015, 02:25:33 am por Gus Garsaky »

Conectado rollth

  • *
  • Underc0der
  • Mensajes: 876
  • Actividad:
    3.33%
  • Reputación 16
  • El conocimiento es libre.
    • Ver Perfil
    • Whateversec
    • Email
  • Twitter: @RoloMijan
« Respuesta #2 en: Abril 25, 2015, 09:13:29 pm »
Muy bueno, rollth. Te recomendaría que apliques otra capa de abstracción y separes el objeto Dinero del proceso y apliques el encapsulamiento (es muy importante).

Por cuestiones de seguridad e integridad de datos, nunca se debe acceder a las variables de un objeto directamente. Ésto puede tener problemas si accidentalmente se cambia (ya que es visible desde cualquier contexto), el resultado final puede variar mucho.

Se me ocurre también crear un método play(), que inicie y controle el juego y que además, sea recursivo para controlar posibles excepciones como NumberFormatException. Además, lanzaríamos un IllegalAccessException si se escoje un número fuera del rango 1 - 6 para poder reiniciar el juego.

Modificando algo tu code, quedaría así:

Código: Java
  1. public class Generator {
  2.         public static Integer generate() {
  3.                 Random random = new Random(System.nanoTime());
  4.                 return 1 + random.nextInt(6);
  5.         }
  6. }

Código: Java
  1. public class Cash {
  2.         private Double quantity;
  3.  
  4.         public Cash() {
  5.  
  6.         }
  7.         public Cash(Double quantity) {
  8.                 this.quantity = quantity;
  9.         }
  10.         public Double getQuantity() {
  11.                 return quantity;
  12.         }
  13.         public void setQuantity(Double quantity) {
  14.                 this.quantity = quantity;
  15.         }
  16. }

Código: Java
  1. public class CashManager {
  2.         public static void increase(Cash cash, Double quantity) {
  3.                 dinero.setQuantity(dinero.getQuantity() + quantity);
  4.         }
  5.         public static void decrease(Cash cash, Double quantity) {
  6.                 dinero.setQuantity(dinero.getQuantity() - quantity);
  7.         }
  8. }

Código: Java
  1. public class Machine {
  2.         private Cash cash;
  3.  
  4.         public Double checkCash() {
  5.                 return cash.getQuantity();
  6.         }
  7.         public void bet(Double betSize , int choosedNumber){
  8.                 if(choosedNumber < 1) {
  9.                         System.out.println("Elija un número válido");
  10.                         return;
  11.                 }
  12.                 if(betSize < checkCash()) {
  13.                         System.out.println("Solo dispone de: "checkCash());
  14.                         return;
  15.                 }
  16.         int generatedNumber = Generator.generate();
  17.         System.out.println("Su numero es: " + choosedNumber);
  18.         System.out.println("El numero que ha salido en el dado es: " + generatedNumber);
  19.         (generatedNumber == choosedNumber) ? win(betSize) : lose(betSize);
  20.     }
  21.     public void play() {
  22.         try {
  23.                 System.out.println("*** EMPIEZA EL JUEGO... ***\n\n"):
  24.                 while(checkCash() > 0) {
  25.                                 System.out.print("\nElija su número (1 al 6): ");
  26.                                 Integer number = reader.nextInt();
  27.                                 if(number < 0 || number > 6) {
  28.                                         throw new IllegalAccessException("Elija un número entre 1 y 6!");
  29.                                 }
  30.                                 System.out.print("\nIngrese el monto de apuesta: ");
  31.                                 Double betSize = reader.nextDouble();
  32.                                 bet(betSize, number);
  33.                         }
  34.                 } catch(NumberFormatException e) {
  35.                         System.out.println("\nDebe ingresar un número");
  36.                         play(); // volvemos a pedir número, (método recursivo)
  37.                 } catch(IllegalAccessException e2) {
  38.                         System.out.println(e.getMessage());
  39.                         play();
  40.                 }
  41.     }
  42.     private void win(Double betSize) {
  43.         System.out.println("!HA GANADO¡");
  44.         DineroManager.increase(cash, betSize * 6);
  45.     }
  46.     private void lose(Double betSize) {
  47.         System.out.println("Ha perdido...");
  48.         DineroManager.decrease(cash, betSize);
  49.     }
  50. }

Código: Java
  1. public class Main {
  2.         public static void main(String[] args) {
  3.                 Scanner reader = new Scanner(System.in);
  4.                 System.out.print("Ingrese el monto inicial: ");
  5.                 Double ammount = reader.nextDouble();
  6.                 Machine machine = new Machine();
  7.                 machine.setCash(ammount);
  8.                 machine.play();
  9.         }
  10. }

Un saludo.

Muchas gracias por las  sugerencias, me vienen muy bien ahora que estoy estudiando java, las tendre en cuenta para proximas ocasiones.

 

¿Te gustó el post? COMPARTILO!



[Video Curso] Iniciacion a Java por DesarrolloWeb y EscuelaIT Mayo 2014

Iniciado por graphixx

Respuestas: 3
Vistas: 1967
Último mensaje Febrero 23, 2015, 10:13:28 am
por Hu3c0
[LIBRO] Programación avanzada en Java - Sonia Jaramillo Valbuena

Iniciado por graphixx

Respuestas: 5
Vistas: 5152
Último mensaje Enero 23, 2019, 07:14:41 pm
por jashin
Java Extremo [Video Cursos Completos] [Español] [ISO] 2009

Iniciado por graphixx

Respuestas: 9
Vistas: 5845
Último mensaje Diciembre 04, 2017, 02:36:34 am
por graphixx
Como compilar programas Java en la consola de comandos de Windows

Iniciado por tar3kw0rm3d

Respuestas: 2
Vistas: 2558
Último mensaje Junio 04, 2013, 02:55:07 pm
por tar3kw0rm3d
[Java] Chat utilizando WebSockets con JavaEE y JavaFx

Iniciado por coke951

Respuestas: 3
Vistas: 4010
Último mensaje Diciembre 23, 2016, 10:23:24 pm
por coke951