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
  • 1966 Vistas

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

Conectado rollth

  • *
  • Underc0der
  • Mensajes: 874
  • Actividad:
    0%
  • 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 No tienes permisos para ver links. Registrate o Entra con tu cuenta generadorAzar;
  11.  
  12.  
  13.     public numeroGenerator(){
  14.         generadorAzar = new No tienes permisos para ver links. Registrate o Entra con tu cuenta();
  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.             No tienes permisos para ver links. Registrate o Entra con tu cuenta.out.println("Su numero es: " + numero);
  26.             No tienes permisos para ver links. Registrate o Entra con tu cuenta.out.println("El numero que ha salido en el dado es: " + numero1);
  27.             if (numero == numero1){
  28.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta.out.println("!HA GANADO¡");
  29.                 dinero.aumentarDinero(apuesta * 6);
  30.             }
  31.             else{
  32.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta.out.println("Ha perdido...");
  33.                 dinero.disminuirDinero(apuesta);
  34.             }
  35.         }
  36.         else{
  37.             No tienes permisos para ver links. Registrate o Entra con tu cuenta.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.
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta

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 No tienes permisos para ver links. Registrate o Entra con tu cuenta generate() {
  3.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta random = new No tienes permisos para ver links. Registrate o Entra con tu cuenta(No tienes permisos para ver links. Registrate o Entra con tu cuenta.nanoTime());
  4.                 return 1 + random.nextInt(6);
  5.         }
  6. }

Código: Java
  1. public class Cash {
  2.         private No tienes permisos para ver links. Registrate o Entra con tu cuenta quantity;
  3.  
  4.         public Cash() {
  5.  
  6.         }
  7.         public Cash(No tienes permisos para ver links. Registrate o Entra con tu cuenta quantity) {
  8.                 this.quantity = quantity;
  9.         }
  10.         public No tienes permisos para ver links. Registrate o Entra con tu cuenta getQuantity() {
  11.                 return quantity;
  12.         }
  13.         public void setQuantity(No tienes permisos para ver links. Registrate o Entra con tu cuenta quantity) {
  14.                 this.quantity = quantity;
  15.         }
  16. }

Código: Java
  1. public class CashManager {
  2.         public static void increase(Cash cash, No tienes permisos para ver links. Registrate o Entra con tu cuenta quantity) {
  3.                 dinero.setQuantity(dinero.getQuantity() + quantity);
  4.         }
  5.         public static void decrease(Cash cash, No tienes permisos para ver links. Registrate o Entra con tu cuenta quantity) {
  6.                 dinero.setQuantity(dinero.getQuantity() - quantity);
  7.         }
  8. }

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

Código: Java
  1. public class Main {
  2.         public static void main(No tienes permisos para ver links. Registrate o Entra con tu cuenta[] args) {
  3.                 Scanner reader = new Scanner(No tienes permisos para ver links. Registrate o Entra con tu cuenta.in);
  4.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta.out.print("Ingrese el monto inicial: ");
  5.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta 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: 874
  • Actividad:
    0%
  • Reputación 16
  • El conocimiento es libre.
    • Ver Perfil
    • Whateversec
    • Email
  • Twitter: @RoloMijan
« Respuesta #2 en: Abril 25, 2015, 09:13:29 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
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 No tienes permisos para ver links. Registrate o Entra con tu cuenta generate() {
  3.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta random = new No tienes permisos para ver links. Registrate o Entra con tu cuenta(No tienes permisos para ver links. Registrate o Entra con tu cuenta.nanoTime());
  4.                 return 1 + random.nextInt(6);
  5.         }
  6. }

Código: Java
  1. public class Cash {
  2.         private No tienes permisos para ver links. Registrate o Entra con tu cuenta quantity;
  3.  
  4.         public Cash() {
  5.  
  6.         }
  7.         public Cash(No tienes permisos para ver links. Registrate o Entra con tu cuenta quantity) {
  8.                 this.quantity = quantity;
  9.         }
  10.         public No tienes permisos para ver links. Registrate o Entra con tu cuenta getQuantity() {
  11.                 return quantity;
  12.         }
  13.         public void setQuantity(No tienes permisos para ver links. Registrate o Entra con tu cuenta quantity) {
  14.                 this.quantity = quantity;
  15.         }
  16. }

Código: Java
  1. public class CashManager {
  2.         public static void increase(Cash cash, No tienes permisos para ver links. Registrate o Entra con tu cuenta quantity) {
  3.                 dinero.setQuantity(dinero.getQuantity() + quantity);
  4.         }
  5.         public static void decrease(Cash cash, No tienes permisos para ver links. Registrate o Entra con tu cuenta quantity) {
  6.                 dinero.setQuantity(dinero.getQuantity() - quantity);
  7.         }
  8. }

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

Código: Java
  1. public class Main {
  2.         public static void main(No tienes permisos para ver links. Registrate o Entra con tu cuenta[] args) {
  3.                 Scanner reader = new Scanner(No tienes permisos para ver links. Registrate o Entra con tu cuenta.in);
  4.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta.out.print("Ingrese el monto inicial: ");
  5.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta 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.
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta

 

¿Te gustó el post? COMPARTILO!



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

Iniciado por graphixx

Respuestas: 3
Vistas: 1694
Último mensaje Febrero 23, 2015, 10:13:28 am
por Hu3c0
Como compilar programas Java en la consola de comandos de Windows

Iniciado por tar3kw0rm3d

Respuestas: 2
Vistas: 2337
Último mensaje Junio 04, 2013, 02:55:07 pm
por tar3kw0rm3d
[LIBRO] Programación avanzada en Java - Sonia Jaramillo Valbuena

Iniciado por graphixx

Respuestas: 4
Vistas: 3469
Último mensaje Noviembre 09, 2018, 09:07:14 am
por ivaneliascalu
Java Extremo [Video Cursos Completos] [Español] [ISO] 2009

Iniciado por graphixx

Respuestas: 9
Vistas: 4848
Último mensaje Diciembre 04, 2017, 02:36:34 am
por graphixx
Sobreescritura y SobreCarga de Métodos en Java ( Overriding y Overloading )

Iniciado por Expermicid

Respuestas: 0
Vistas: 1289
Último mensaje Noviembre 02, 2014, 05:02:04 pm
por Expermicid