Autor Tema: Java ejemplo simulación aleatorios juego lotería primitiva Ejercicio 2 CU00909C  (Leído 8381 veces)

LuisSanabria

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Buenas!! Este es mi primer post! y antes que nada quisiera agradecerles a los profesores, compañeros por el tiempo y esfuerzo empleado en enseñar, difundir, corregir este curso... Lo poco (que para mi es muchisimo) que he avanzado se lo debo a ustedes muchachos!! Muchas gracias y felicitaciones!!

Como veran soy novato (super novato) en el arte de la programacion! asi que no se sorprendan si aparece cualquier burrada por aqui!! ;D :D

Ejercicio 2 CU00909C del curso avanzado de Java

Citar
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

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

/**
 *
 * @author usuario
 */
public class EntradaTeclado {

    private int entradaInt;
    private String entradaStr;
    Scanner sc = new Scanner(System.in);
    Scanner scStr = new Scanner(System.in);

    public EntradaTeclado() {
        entradaInt = 0;
        entradaStr = "";
    }

    public void setEntradaInt() {
        entradaInt = sc.nextInt();
    }

    public int getEntradaInt() {
        return entradaInt;
    }

    public void setEntradaStr() {
        entradaStr = scStr.nextLine();
    }

    public String getEntradaStr() {
        return entradaStr;
    }

}

Algunos metodos de esta clase lo consegui investigando un poco por internet.. asi que no crean que salió de este cerebruto!! ;D ;D
Código: [Seleccionar]
import java.util.Arrays;

public class DatosUnicos {
    private int vector[];
    private EntradaTeclado entrada1;
   
    public DatosUnicos(){
        vector=new int[6];
        entrada1= new EntradaTeclado();
    }
    public int generarAle(int min,int max){
        return (int)((max-min+1)*Math.random()+min);
    }
    public int buscar(int n){
        for(int i=0;i<vector.length;i++){
            if(vector[i]==n){
                System.out.println("Numero repetido... Por favor elija otro numero: ");
                return i;
            }
        }
        return -1;
    }
    public void llenarDatosAle(){
        int n;
        for(int i=0;i<vector.length;i++){
            do{
                n=generarAle(1,49);
            }while(buscar(n)!=-1);
            vector[i]=n;
        }
    }
    public void llenarDatos(){
        System.out.println("Elige 6 numeros entre el 1 y el 49.");
        int n;
        for(int i=0;i<vector.length;i++){
            System.out.print("Elije el numero " + (i + 1) + ": ");
            do{
                entrada1.setEntradaInt();
                n=entrada1.getEntradaInt();
            }while(buscar(n)!=-1);
            vector[i]=n;
        }
    }
    public String mostrarDatos(){
        return Arrays.toString(vector);
    }
    public int getVectorElemento(int e){
        return vector[e];
    }
    public void ordenar(){
        Arrays.parallelSort(vector);
    }

   
}

La clase main
Código: [Seleccionar]
public class MainLoteria {

    public static void main(String[] args) {

        EntradaTeclado entrada = new EntradaTeclado();
        DatosUnicos cg = new DatosUnicos();
        DatosUnicos numElegidos = new DatosUnicos();
        String continuar;

        cg.llenarDatosAle();
        cg.ordenar();
        do {
            int acertados = 0;

            numElegidos.llenarDatos();
            numElegidos.ordenar();
            System.out.println("Numeros elegidos " + numElegidos.mostrarDatos());
            System.out.println("Combinacion ganadora " + cg.mostrarDatos());

            for (int i = 0; i < 6; i++) {
                for (int j = 0; j < 6; j++) {
                    if (cg.getVectorElemento(i) == numElegidos.getVectorElemento(j)) {
                        acertados++;
                    }
                }

            }
            if (acertados != 0) {
                System.out.println("¡Has acertado: " + acertados + " nùmeros!");
            } else {
                System.out.println("¡No has acertado ningun numero");
            }
            System.out.println("Quieres probar otra vez?(S/N): ");
            entrada.setEntradaStr();
            continuar = entrada.getEntradaStr();
        } while (continuar.equalsIgnoreCase("s"));
        System.out.println("Adios");

    }
}
« Última modificación: 30 de Noviembre 2016, 20:39 por Alex Rodríguez »

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Re:Ejercicio 2 CU00909C
« Respuesta #1 en: 13 de Noviembre 2016, 04:50 »
Buenos días.

El ejercicio es correcto.El único problema que le veo es que cuando le das a probar otra vez,la combinación ganador que sale vuelve a ser la misma.Además si eliges algún número que ya hubieras elegido en la combinación anterior,te dice que ya está repetido.
Esto se puede solucionar metiendo dentro del do las líneas
Código: [Seleccionar]
cg.llenarDatosAle();
        cg.ordenar();
en el main.Así cada vez que le des a probar de nuevo te creara una combinación nueva.
Ademas en los métodos llenarDatosAle() y llenarDatos() debes meter la línea
Código: [Seleccionar]
vector=new int[6]; para iniciar el vector en cada intento.

Un saludo

LuisSanabria

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Re:Ejercicio 2 CU00909C
« Respuesta #2 en: 14 de Noviembre 2016, 16:42 »
Buenas! Gracias por sus correcciones! :) Efectivamente olvide volver a poner dentro del do esas lineas...  :-[ es que necesitaba tener y saber una sola combinacion ganadora para ir testeando el comportamiento en caso de acertar los numeros.. cosa que tambien podría haberlo hecho con un cg.mostraDatos() luego de llenar y ordenar (para saber la cobinacion antes de ingresar los numeros por teclado)..  ;D
En el referente a los metodos llenarDatosAle() y llenarDatos() quedaría asi no:?
Código: [Seleccionar]
import java.util.Arrays;

public class DatosUnicos {
    private int vector[];
    private EntradaTeclado entrada1;
   
    public DatosUnicos(){
        vector=new int[6];
        entrada1= new EntradaTeclado();
    }
    public int generarAle(int min,int max){
        return (int)((max-min+1)*Math.random()+min);
    }
    public int buscar(int n){
        for(int i=0;i<vector.length;i++){
            if(vector[i]==n){
                System.out.println("Numero repetido... Por favor elija otro numero: ");
                return i;
            }
        }
        return -1;
    }
    public void llenarDatosAle(){
        vector=new int[6];
        int n;
        for(int i=0;i<vector.length;i++){
            do{
                n=generarAle(1,49);
            }while(buscar(n)!=-1);
            vector[i]=n;
        }
    }
    public void llenarDatos(){
        vector=new int[6];
        System.out.println("Elige 6 numeros entre el 1 y el 49.");
        int n;
        for(int i=0;i<vector.length;i++){
            System.out.print("Elije el numero " + (i + 1) + ": ");
            do{
                entrada1.setEntradaInt();
                n=entrada1.getEntradaInt();
            }while(buscar(n)!=-1);
            vector[i]=n;
        }
    }
    public String mostrarDatos(){
        return Arrays.toString(vector);
    }
    public int getVectorElemento(int e){
        return vector[e];
    }
    public void ordenar(){
        Arrays.parallelSort(vector);
    }

   
}

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Re:Ejercicio 2 CU00909C
« Respuesta #3 en: 14 de Noviembre 2016, 17:02 »
Buenas tardes.

Si quedarian asi.

Un saludo

joe

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Ejercicio 2 CU00909C
« Respuesta #4 en: 17 de Noviembre 2016, 23:23 »
en donde compilan ustedes por en eclipse me sale un error

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Re:Ejercicio 2 CU00909C
« Respuesta #5 en: 18 de Noviembre 2016, 05:39 »
Buenos días.
En BlueJ y en Eclipse.
Para que te funcione tienes que coger las clases MainLoteria y EntradaTeclado de la primera entrada de este hilo,y la clase  DatosUnicos de la última entrada.

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