Autor Tema: Java programa de apuestas con números aleatorios al azar. Clase Random CU00909C#  (Leído 6216 veces)

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola, aquí dejo una posible solución a los dos ejercicios de la unidad CU00909C del curso avanzado de programación Java


Citar
EJERCICIO Nº 1

Crea un programa que elija dos números enteros aleatorios A y B pero no los muestre por pantalla aún. Si los dos números fueran iguales, deberá repetirse la elección hasta que sean distintos. El programa preguntará por quién apostamos, A o B (gana el número más alto). Una vez el usuario haya introducido su apuesta, el programa mostrará el valor de A y B, dirá si hemos ganado la apuesta (acertado el número más alto) o perdido y nos dirá cuántas partidas hemos ganado y perdido hasta el momento. Tras una jugada, nos preguntará si queremos jugar otra vez.

Ejemplo de ejecución:

Apuestas por A o por B ? : A
A saca un 9 y B saca un 6     HAS GANADO!!!
Llevas 1 partidas ganadas y 0 partidas perdidas
Quieres probar otra vez ? (S/N) : S
Apuestas por A o por B ? : A
A saca un 1 y B saca un 8     HAS PERDIDO!!!
Llevas 1 partidas ganadas y 1 partidas perdidas
Quieres probar otra vez ? (S/N) : N
Adiós

Clase TestApuestaPorUnNumero
Código: [Seleccionar]
public class TestApuestaPorUnNumero {

public static void main(String[] args) {
GeneradorDeNumerosAleatorios generador = new GeneradorDeNumerosAleatorios(1, 100);
EntradaDeTeclado entrada = new EntradaDeTeclado();
Marcador marcador = new Marcador();
char otraVez;
int numA, numB;
char apuesta;
do{
numA = generador.getNumeroAleatorio();
numB = generador.getNumeroAleatorio();
while(numA == numB) {
numB = generador.getNumeroAleatorio();
}
System.out.println(numA + "; " +numB);
System.out.print("¿Apuestas por A o por B? ");
apuesta = entrada.getChar();
while(apuesta != 'a' && apuesta != 'A' && apuesta != 'b' && apuesta != 'B') {
System.out.println(numA + "; " +numB);
System.out.print("Apuesta erronea, apueste otra vez!!!.\n¿Apuestas por A o por B? ");
apuesta = entrada.getChar();
}
System.out.print("A saca un " + numA + " y B saca un " + numB);
if((numA > numB && (apuesta == 'A' || apuesta == 'a')) ||
(numB > numA && (apuesta == 'B' || apuesta == 'b'))) {
marcador.addAcierto();
System.out.print("\tHAS GANADO!!!\n");
} else {
marcador.addError();
System.out.print("\tHAS PERDIDO!!!\n");
}
marcador.addPartida();
System.out.println("Llevas " + marcador.getPartidas() + " partidas. Has ganado " +
marcador.getAciertos() + " y perdido " + marcador.getErrores() + ".");
System.out.println("¿Quieres apostar otra vez? (S/N): ");
otraVez = entrada.getChar();
} while(otraVez == 's' || otraVez == 'S');

System.out.println("Adiós");
}

}

Clase Marcador
Código: [Seleccionar]
public class Marcador {

private int aciertos;
private int errores;
private int numPartidas;

public Marcador() {
aciertos = 0;
errores = 0;
numPartidas = 0;
}

public void setAciertos(int aciertos) {
this.aciertos = aciertos;
}

public void setErrores(int errores) {
this.errores = errores;
}

public void setNumPartidas(int numPartidas) {
this.numPartidas = numPartidas;
}

public int getAciertos() {
return aciertos;
}

public int getErrores() {
return errores;
}

public int getPartidas() {
return numPartidas;
}

public void addAcierto() {
aciertos++;
}

public void addError() {
errores++;
}

public void addPartida() {
numPartidas++;
}
}

Citar
EJERCICIO Nº 2

Ahora vamos a jugar a la “Lotería primitiva”. Para ello, se pedirá al usuario que introduzca 6 números enteros comprendidos entre el 1 y el 49 ambos incluidos. No estará permitido repetir número. Una vez elegidos los seis números el programa nos mostrará nuestros 6 números así como la combinación ganadora (ordenada de menor a mayor). Esta combinación constará de 6 números entre 1 y 49 elegidos al azar por el programa. Finalmente nos dirá cuántos aciertos hemos tenido y nos preguntará si queremos volver a jugar.

Ejemplo de ejecución:

Elige 6 numeros entre el 1 y el 49.
Elige el numero 1 : 3
Elige el numero 2 : 8
Elige el numero 3 : 14
Elige el numero 4 : 2
Elige el numero 5 : 34
Elige el numero 6 : 38
Numeros Elegidos    : 3  8  14  2  34  38
Combinación ganadora : 6  14   21  27  30  48
Has acertado : 1 números
Quieres probar otra vez ? (S/N) : n
Adiós

Clase TestLoteriaPrimitiva
Código: [Seleccionar]
public class TestLoteriaPrimitiva {
public static void main(String[] args) {
GeneradorDeNumerosAleatorios generador = new GeneradorDeNumerosAleatorios(1, 49);
EntradaDeTeclado entrada = new EntradaDeTeclado();
ListaDeEnteros combinacionGanadora;
ListaDeEnteros apuesta;
int numeroCombinacion, numeroApuesta, aciertos;
char otraVez = 'n';

do{
aciertos = 0;
combinacionGanadora = new ListaDeEnteros();
apuesta = new ListaDeEnteros();
for(int i = 0; i < 6; i++) { // Crea la combinación ganadora
numeroCombinacion = generador.getNumeroAleatorio();
while(combinacionGanadora.getSiListaContiene(numeroCombinacion)){ // Comprueba que no se repita ningún número
numeroCombinacion = generador.getNumeroAleatorio();
}
combinacionGanadora.addNumero(numeroCombinacion);
}

System.out.println("Elija 6 números entre el 1 y el 49.");
for(int i = 0; i < 6; i++) {// Solicita seis números al usuario
System.out.print("Elija el numero " + (i+1) + ": ");
numeroApuesta = entrada.getInt();
while(apuesta.getSiListaContiene(numeroApuesta) == true ||
numeroApuesta < 1 || numeroApuesta > 49){ // Comprueba que no se repitan los números introducidos por el usuario
System.out.print("El número introducido está fuera de ragon o repetido." +
"\nElija el numero " + (i+1) + ": ");
numeroApuesta = entrada.getInt();
}
apuesta.addNumero(numeroApuesta);
}
for(int i = 0; i < combinacionGanadora.getSize(); i++) { // Compara la combinación ganadora con la apuesta
if(apuesta.getSiListaContiene(combinacionGanadora.getContenidoPosicion(i))){
aciertos++;
}
}

System.out.println("Número elegidos: " + apuesta.getContenidoCombinacion());
System.out.println("Combinación ganadora: " + combinacionGanadora.getContenidoCombinacion());
System.out.println("Has acertado: " + aciertos + " números.");
System.out.print("¿Quieres probar otra vez? (S/N): ");
otraVez = entrada.getChar();

} while(otraVez == 's' || otraVez == 'S');

System.out.println("Adiós");
}
}

Clase ListaDeEnteros
Código: [Seleccionar]
import java.util.ArrayList;

public class ListaDeEnteros {

    private ArrayList <Integer> listaEnteros;
   
    public ListaDeEnteros() {
    listaEnteros = new ArrayList <>();
    }
   
    public void addNumero(int numero) {
    listaEnteros.add(numero);
    }
   
    public ArrayList<Integer> getNumero() {
        return listaEnteros;
    }
   
    public boolean getSiListaContiene(int numero) {
    return listaEnteros.contains(numero);
    }
   
    public int getSize() {
    return listaEnteros.size();
    }
   
    public int getContenidoPosicion(int index) {
    return listaEnteros.get(index);
    }
   
    public String getContenidoCombinacion(){
        String msg = "";
            for(int numero: listaEnteros) {
                msg += numero + " ";
            }
        return msg;
    }

}

Aquí dejo dos clases más que se usan en ambos ejercercicios.

Clase GeneradorDeNumerosAleatorios
Código: [Seleccionar]
import java.util.Random;

public class GeneradorDeNumerosAleatorios {
private Random rnd;
private int limiteRango1;
private int limiteRango2;

public GeneradorDeNumerosAleatorios() {
rnd = new Random();
this.limiteRango1 = 0;
this.limiteRango2 = 0;
}

public GeneradorDeNumerosAleatorios(int limiteRango1) {
rnd = new Random();
this.limiteRango1 = limiteRango1;
this.limiteRango2 = 0;
}

public GeneradorDeNumerosAleatorios(int limiteRango1, int limiteRango2) {
rnd = new Random();
this.limiteRango1 = limiteRango1;
this.limiteRango2 = limiteRango2;
}

public void setLimiteRango1(int limiteRango1) {
this.limiteRango1 = limiteRango1;
}

public void setLimiteRango2(int limiteRango2) {
this.limiteRango2 = limiteRango2;
}

public int getLimiteRango1() {
return limiteRango1;
}

public int getLimiteRango2() {
return limiteRango2;
}

public int getNumeroAleatorio() {
if(limiteRango1 < limiteRango2) {
return rnd.nextInt(limiteRango2 - limiteRango1 + 1) + limiteRango1;
} else {
return rnd.nextInt(limiteRango1 - limiteRango2 + 1) + limiteRango2;
}
}
}

Clase EntradaDeTeclado
Código: [Seleccionar]
import java.util.Scanner;

public class EntradaDeTeclado {
    Scanner entradaDeTeclado;
    public EntradaDeTeclado ()  {
        entradaDeTeclado = new Scanner(System.in);
    }
 
    public String getString () {
    return entradaDeTeclado.nextLine();
    }
   
    public int getInt() {
    return Integer.parseInt(entradaDeTeclado.nextLine());
    }
   
    public double getDouble() {
    return Double.parseDouble(entradaDeTeclado.nextLine());
    }
   
    public char getChar() {
    String entrada = entradaDeTeclado.nextLine();
    if(entrada.equals("")){
    return ' ';
    } else {
    return entrada.charAt(0);
    }
    }

}

Saludos. ;D
« Última modificación: 25 de Marzo 2017, 22:32 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas, como antes muy buen código

En TestApuestaPorUnNumero al jugar nos muestra previamente los números, con lo cual ya sabemos por quién apostar :) Para jugar sin conocer el resultado simplemente comentar esta línea en esa clase:

//System.out.println(numA + "; " +numB);    

Salu2

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Ups!!, se me olvidó quitar esa línea.

Gracias por la corrección Ogramar.

Saludos. ;D

 

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".