Autor Tema: Java Números aleatorios juego apostar por cuál será número más grande CU00909C  (Leído 2323 veces)

Pepote21

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 92
    • Ver Perfil
Hola a todos. Presento mi código. El método de mostrarNums() simplemente es para comprobar y el método compararNums2() es porque sin él cuando los dos números eran iguales, a veces me fallaba, muy pocas veces. Así pues, de ahí ese segundo método de comparar.

GRACIAS. Un saludo.

Código: [Seleccionar]
   
package practicas.avanzadas.ej_909_C_1;
import java.util.Random;
import java.util.Scanner;
/**
 * Ejercicio 1 CU00909C
 * Apostar por un número mayor que otro
 * @author pepote21
 * @version 20170201
 */
public class Apostar909_C_1{
   
    Random rnd=new Random();
    Scanner sc=new Scanner(System.in);
    int A,B,mayor,partGanadas,partPerdidas;
    String apostar,respuesta;
   
    public Apostar909_C_1(){
        A=0;
        B=0;
        mayor=0;
        partGanadas=0;
        partPerdidas=0;
        apostar="";
        respuesta="";
    }
   
    public void generarNums(){
        A=rnd.nextInt(11);
        B=rnd.nextInt(11);
    }
   
     public void compararNums(){
        if(A==B){
            generarNums();
            compararNums2();
        }else if(A>B){
            mayor=A;
        }else{
            mayor=B;
        }
    }
     
     public void compararNums2(){
          if(A==B){
            generarNums();
        }else if(A>B){
            mayor=A;
        }else{
            mayor=B;
        }
     }
     
     public void mostrarNums(){
         System.out.println("A = "+A);
         System.out.println("B = "+B);
     }
   
    public String apostarPor(){
        System.out.print("¿Apuestas por A o por B?: ");
        apostar=sc.nextLine();
        return apostar;
    }
       
    public void mostrarResultado(){
        if(mayor==A && apostar.equalsIgnoreCase("A") || mayor==B && apostar.equalsIgnoreCase("B")){
            System.out.println("A saca un "+A+" y B saca un "+B+"    HAS GANADO!!!");
            partGanadas++;
        }else{
            System.out.println("A saca un "+A+" y B saca un "+B+"    HAS PERDIDO!!!");
            partPerdidas++;
        }
            System.out.println("Llevas "+partGanadas+" partidas ganadas y "+partPerdidas+" partidas perdidas");
    }
   
    public void apostarMas(){
        System.out.println("¿Quieres probar otra vez? (S/N)");
        respuesta=sc.nextLine();
        if(respuesta.equalsIgnoreCase("S")){
            generarNums();
            mostrarNums();
            compararNums();
            mostrarNums();
            apostarPor();
            mostrarResultado();
            apostarMas();
        }else{
            System.out.println("Adios");
        }
       
    }
   
    public static void main(String[] args){
       
        Apostar909_C_1 ap=new Apostar909_C_1();
       
        ap.generarNums();
        ap.mostrarNums();
        ap.compararNums();
        ap.mostrarNums();
        ap.apostarPor();
        ap.mostrarResultado();
        ap.apostarMas();
    }   
   
}

« Última modificación: 25 de Marzo 2017, 22:34 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas Pepote21 cuando presentes los resultados de una entrega de un curso es conveniente presentar todos los ejercicios de esa entrega al mismo tiempo (en el mismo hilo), en lugar de presentar solo un ejercicio.

Un ejemplo de resultado obtenido con tu código es este:

A = 3
B = 0
A = 3
B = 0
¿Apuestas por A o por B?: A
A saca un 3 y B saca un 0    HAS GANADO!!!
Llevas 1 partidas ganadas y 0 partidas perdidas
¿Quieres probar otra vez? (S/N)
S
A = 4
B = 2
A = 4
B = 2
¿Apuestas por A o por B?: B
A saca un 4 y B saca un 2    HAS PERDIDO!!!
Llevas 1 partidas ganadas y 1 partidas perdidas
¿Quieres probar otra vez? (S/N)
N
Adios



El ejercicio nos pedía no mostrar el resultado antes de que el usuario apostara, pero eso no lo cumple el código. Además lo muestra por duplicado.

Otra cosa a mejorar es la forma de nombrar las clases (Apostar909_C_1 no es un nombre adecuado) y el hacer un buen diseño orientado a objetos (según esto, las responsabilidades deben estar separadas en clases, no todo junto).

Otra cosa a mejorar: el diseño basado en compararNums y compararNums2 no es un buen diseño.

En este hilo puedes ver un ejemplo de mejor diseño: https://www.aprenderaprogramar.com/foros/index.php?topic=5682.0 aunque como siempre la recomendación es seguir el curso de Java básico para adquirir buenos hábitos en la programación orientada a objetos

Salu2

Pepote21

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 92
    • Ver Perfil
Gracias Ogramar.
Lo tengo todo en cuenta. Nada más vuelva a java lo repasaré todo.
Un saludo.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".