Ejercicio Java

  • 2 Respuestas
  • 3152 Vistas

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

Desconectado rollth

  • *
  • Ex-Staff
  • *****
  • Mensajes: 876
  • Actividad:
    0%
  • Reputación 16
  • El conocimiento es libre.
  • Twitter: @RoloMijan
    • Ver Perfil
    • Whateversec
    • Email

Ejercicio Java

  • 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 You are not allowed to view links. Register or Login generadorAzar;
  11.  
  12.  
  13.     public numeroGenerator(){
  14.         generadorAzar = new You are not allowed to view links. Register or Login();
  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.             You are not allowed to view links. Register or Login.out.println("Su numero es: " + numero);
  26.             You are not allowed to view links. Register or Login.out.println("El numero que ha salido en el dado es: " + numero1);
  27.             if (numero == numero1){
  28.                 You are not allowed to view links. Register or Login.out.println("!HA GANADO¡");
  29.                 dinero.aumentarDinero(apuesta * 6);
  30.             }
  31.             else{
  32.                 You are not allowed to view links. Register or Login.out.println("Ha perdido...");
  33.                 dinero.disminuirDinero(apuesta);
  34.             }
  35.         }
  36.         else{
  37.             You are not allowed to view links. Register or Login.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 »

Rollth
Buen hacker mejor persona.
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Desconectado Gus Garsaky

  • *
  • Underc0der
  • Mensajes: 93
  • Actividad:
    0%
  • Reputación -1
  • Skype: gus.garsaky
    • Ver Perfil

Re:Ejercicio Java

  • 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 You are not allowed to view links. Register or Login generate() {
  3.       You are not allowed to view links. Register or Login random = new You are not allowed to view links. Register or Login(You are not allowed to view links. Register or Login.nanoTime());
  4.       return 1 + random.nextInt(6);
  5.    }
  6. }

Código: Java
  1. public class Cash {
  2.    private You are not allowed to view links. Register or Login quantity;
  3.  
  4.    public Cash() {
  5.  
  6.    }
  7.    public Cash(You are not allowed to view links. Register or Login quantity) {
  8.       this.quantity = quantity;
  9.    }
  10.    public You are not allowed to view links. Register or Login getQuantity() {
  11.       return quantity;
  12.    }
  13.    public void setQuantity(You are not allowed to view links. Register or Login quantity) {
  14.       this.quantity = quantity;
  15.    }
  16. }

Código: Java
  1. public class CashManager {
  2.    public static void increase(Cash cash, You are not allowed to view links. Register or Login quantity) {
  3.       dinero.setQuantity(dinero.getQuantity() + quantity);
  4.    }
  5.    public static void decrease(Cash cash, You are not allowed to view links. Register or Login quantity) {
  6.       dinero.setQuantity(dinero.getQuantity() - quantity);
  7.    }
  8. }

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

Código: Java
  1. public class Main {
  2.    public static void main(You are not allowed to view links. Register or Login[] args) {
  3.       Scanner reader = new Scanner(You are not allowed to view links. Register or Login.in);
  4.       You are not allowed to view links. Register or Login.out.print("Ingrese el monto inicial: ");
  5.       You are not allowed to view links. Register or Login 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 »

Desconectado rollth

  • *
  • Ex-Staff
  • *****
  • Mensajes: 876
  • Actividad:
    0%
  • Reputación 16
  • El conocimiento es libre.
  • Twitter: @RoloMijan
    • Ver Perfil
    • Whateversec
    • Email

Re:Ejercicio Java

  • en: Abril 25, 2015, 09:13:29 pm
You are not allowed to view links. Register or Login
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 You are not allowed to view links. Register or Login generate() {
  3.       You are not allowed to view links. Register or Login random = new You are not allowed to view links. Register or Login(You are not allowed to view links. Register or Login.nanoTime());
  4.       return 1 + random.nextInt(6);
  5.    }
  6. }

Código: Java
  1. public class Cash {
  2.    private You are not allowed to view links. Register or Login quantity;
  3.  
  4.    public Cash() {
  5.  
  6.    }
  7.    public Cash(You are not allowed to view links. Register or Login quantity) {
  8.       this.quantity = quantity;
  9.    }
  10.    public You are not allowed to view links. Register or Login getQuantity() {
  11.       return quantity;
  12.    }
  13.    public void setQuantity(You are not allowed to view links. Register or Login quantity) {
  14.       this.quantity = quantity;
  15.    }
  16. }

Código: Java
  1. public class CashManager {
  2.    public static void increase(Cash cash, You are not allowed to view links. Register or Login quantity) {
  3.       dinero.setQuantity(dinero.getQuantity() + quantity);
  4.    }
  5.    public static void decrease(Cash cash, You are not allowed to view links. Register or Login quantity) {
  6.       dinero.setQuantity(dinero.getQuantity() - quantity);
  7.    }
  8. }

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

Código: Java
  1. public class Main {
  2.    public static void main(You are not allowed to view links. Register or Login[] args) {
  3.       Scanner reader = new Scanner(You are not allowed to view links. Register or Login.in);
  4.       You are not allowed to view links. Register or Login.out.print("Ingrese el monto inicial: ");
  5.       You are not allowed to view links. Register or Login 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.

Rollth
Buen hacker mejor persona.
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

 

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

Iniciado por graphixx

Respuestas: 3
Vistas: 3902
Último mensaje Febrero 23, 2015, 10:13:28 am
por Hu3c0
Java Extremo [Video Cursos Completos] [Español] [ISO] 2009

Iniciado por graphixx

Respuestas: 9
Vistas: 9801
Ú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: 4234
Último mensaje Junio 04, 2013, 02:55:07 pm
por tar3kw0rm3d
Cheat-Sheet: JAVA - Hoja Guía para que no se me olvide

Iniciado por Denisse

Respuestas: 1
Vistas: 593
Último mensaje Julio 21, 2020, 12:43:49 pm
por DevCode
Tutorial: Traduccion de aplicaciones JAVA - Moviles [By :: SmartGenius :: ]

Iniciado por ProcessKill

Respuestas: 0
Vistas: 2518
Último mensaje Febrero 24, 2010, 04:26:07 pm
por ProcessKill