comment
IRC Chat
play_arrow
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
  • 1866 Vistas

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

Conectado rollth

  • *
  • Underc0der
  • Mensajes: 875
  • Actividad:
    1.67%
  • 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 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
    • 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 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 »

Conectado rollth

  • *
  • Underc0der
  • Mensajes: 875
  • Actividad:
    1.67%
  • Reputación 16
  • El conocimiento es libre.
    • Ver Perfil
    • Whateversec
    • Email
  • Twitter: @RoloMijan
« Respuesta #2 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

 

¿Te gustó el post? COMPARTILO!



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

Iniciado por graphixx

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

Iniciado por graphixx

Respuestas: 2
Vistas: 2627
Último mensaje Junio 01, 2018, 01:56:36 pm
por eervv
Java Extremo [Video Cursos Completos] [Español] [ISO] 2009

Iniciado por graphixx

Respuestas: 9
Vistas: 4384
Ú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: 2168
Último mensaje Junio 04, 2013, 02:55:07 pm
por tar3kw0rm3d
[VIDEOTUTORIAL] Java 7 (2011) Creación de aplicaciones de escritorio

Iniciado por graphixx

Respuestas: 3
Vistas: 2246
Último mensaje Diciembre 13, 2017, 12:15:55 pm
por Jean Grey