Autor Tema: Juego de la lotería primitiva en Java generar aleatorios sin repetición CU00909C  (Leído 6074 veces)

Luis Fdo Carvajal

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 37
    • Ver Perfil
Buenas tardes,
 :-[
Dejo el ejercicio uno y dos de la entrega CU00909C del tutorial de programación avanzada en Java, sólo que en el segundo, sinceramente llevo varios días y a un no logro hallar la manera de como hacer que el random no genere números repetidos. Agradecería algo de apoyo.

EJERCICIO Nº 1(CU00909C)
Código: [Seleccionar]
package random_3;
import java.util.Random;
import java.util.Scanner;

/**
 *
 * @author ITCO1724
 */
public class Random_3 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       int a = 0, b = 0;
   String apuesta = "";
   String empezar = "";
   int contadorAciertos = 0;
   int contadorFallos = 0;
   
   
   Scanner sc = new Scanner(System.in);
 

do{    Random rnd = new Random();
   
   
//Generar dos números a y b entre cero y 100
        a = rnd.nextInt(101);
        b = rnd.nextInt(101);
//Mostrar por pantalla los números random generados
        /*System.out.println(a);       
        System.out.println(b);*/

        System.out.println (" Vamos a adivinar quien es el numero más alto A O B: ");
        System.out.print("Introduce tu apuesta A/B : ");
        apuesta = sc.nextLine();
       
   
    if (apuesta.equalsIgnoreCase("a") && (a>b) || apuesta.equalsIgnoreCase("b") && (a<b)) {
        contadorAciertos++;
        System.out.println("A saca un " + a + " y B saca un " + b + "   HAS GANADO  :!!!");
        System.out.println("Llevas " + contadorAciertos + " partidas ganadas y " + contadorFallos + " partidas perdidas");}
  else {
        contadorFallos++;
        System.out.println("A saca un " + a + " y B saca un " + b + "   HAS PERDIDO!!!  :");
        System.out.println("Llevas " + contadorAciertos + " partidas ganadas y " + contadorFallos + " partidas perdidas");}
        System.out.println("Quieres probar otra vez ? (s/n) : ");
        empezar = sc.nextLine();
      }
while (empezar.equalsIgnoreCase("s"));
System.out.println("Adios");

    }
}

EJERCICIO Nº 2(CU00909C)
Código: [Seleccionar]
package loteria;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
/**
 *
 * @author ITCO1724
 */
public class Loteria {

    public static void main(String[] args) {
    int a,b,c,d,e,f;
    int i,j,aux;
    int contadorAciertos = 0;
    int contadorFallos = 0;
    String empezar = "";
   
    int[] random = new int [6];
    int[] numeros = new int[6];

    Scanner sc = new Scanner(System.in);
    Random rnd = new Random();

 
//Generar seis números a y b entre 1 y 49
    a = rnd.nextInt(50); b = rnd.nextInt(50); c = rnd.nextInt(50); d = rnd.nextInt(50); e = rnd.nextInt(50); f = rnd.nextInt(50);
    random[0] = a; random[1] = b; random[2] = c; random[3] = d; random[4] = e; random[5] = f;
    /*System.out.println(a);  System.out.println(b); System.out.println(c); System.out.println(d);
    System.out.println(e);System.out.println(f);*/
    /*random[0]=rnd.nextInt(50);random[1]=rnd.nextInt(50);random[2]=rnd.nextInt(50);random[3]=rnd.nextInt(50);
    random[4]=rnd.nextInt(50);random[5]=rnd.nextInt(50);*/
   
   


 
 
 
   
 //Mostrar por pantalla los números random generados   
    for ( i= 0; i<=5; i++){
               System.out.print(random[i]+ ", ");
           }
   
//Ordenar arreglo de menor a mayor
    for ( i= 0; i<=5; i++){
        for (j=i+1; j<=5; j++){
            if ( random[i]>random[j]){
                aux = random[i];
                random[i] = random[j];
                random[j] = aux;
            }
        }
    }

    //presentar arreglo ordenado de menor a mayor
    for ( i= 0; i<=5; i++){
        System.out.print(random[i]);}
do{
    System.out.println();

    System.out.println (" Vamos a jugar a la Lotería primitiva ");
    System.out.print("Introduce tus seis numeros de apuesta entre el 1 y 49 : ");
    System.out.print("No puedes repetir numeros: ");       

    for(i = 0; i <= 5; i++) {
System.out.print("\n"+ "Elige el numero "+ (i+1) + ":" );
numeros[i] = sc.nextInt();}
   
        //Ordenar arreglo de menor a mayor los numeros elegidos
    for ( i= 0; i<=5; i++){
        for (j=i+1; j<=5; j++){
            if ( numeros[i]>numeros[j]){
                aux = numeros[i];
                numeros[i] = numeros[j];
                numeros[j] = aux;
            }
        }
    }
   
//Mostrar por pantalla los números elegidos
    for(i = 0; i <= 5; i++) {   
        System.out.print(numeros[i]);}
        System.out.print("\n"+"La combinación Ganadora es :");
    for(i = 0; i <= 5; i++) {   
        //System.out.print("La combinación Ganadora es :" );
        System.out.print(random[i]);}
//Comparar ambos arreglos
   
    System.out.println (("\n"+"¿Tienen el mismo contenido (relación de igualdad ambas combinaciones)? ... " + Arrays.equals(random, numeros) ) );
    if (Arrays.equals(random, numeros)==true){
        System.out.println("EN HORA BUENA !!!HAS HACERTADO!!");}
    else {
            System.out.println(" !!!No has acertado!!");}
//Comparación de arreglos
           for (i=0; i<6; i++){
               System.out.print ("\n"+"random[" + i +"]= " + random[i] +"; ");
               System.out.print ("\n"+"numeros[" + i +"]= " + numeros[i]+"; "); }
               
            //Arrays.equals(random, numeros);
           if (random[0] != numeros[0] ){
                contadorFallos++;
                System.out.println("\n"+"Has perdido : " + (contadorFallos)+ "Cifra" );}
           else {
                 contadorAciertos++;
                 System.out.println("\n"+"Has acertado : " + (contadorAciertos)+ "Cifra" );}
               
           if (random[1] != numeros[1] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
           else{
                contadorAciertos++;
                System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
                     
                   
           if (random[2] != numeros[2] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
            else {
                  contadorAciertos++;
                  System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
                                         
              if (random[3] != numeros[3] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
             else{
                  contadorAciertos++;
                  System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
                         
           
              if (random[4] != numeros[4] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
                else {
                       contadorAciertos++;
                        System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
             
           if (random[5] != numeros[5] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
            else{
                       contadorAciertos++;
                        System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
               
              if (random[6] != numeros[6] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
                else {
                       contadorAciertos++;
                        System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
             
             
    System.out.println("Quieres probar otra vez ? (s/n) : ");
    empezar = sc.nextLine();                           
            }
   
    while (empezar.equalsIgnoreCase("s"));
    System.out.println("Adios");
    }
   
    }

Saludos
 :-[ :-[ :-[ :-[
« Última modificación: 19 de Junio 2017, 20:48 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re:CU00909C Ejercicios 1 y 2
« Respuesta #1 en: 18 de Mayo 2017, 12:20 »
en el segundo, sinceramente llevo varios días y a un no logro hallar la manera de como hacer que el random no genere números repetidos. Agradecería algo de apoyo.

Una forma que se me ocurre, usando los elementos básicos disponibles a este nivel (con Clases y Programacion Orientada Objetos podría ser más fácil), es la siguiente:

Sería recorrer el arreglo/vector/array (como queramos llamarlo...) y por cada una de sus posiciones, generar un numero random.
Antes de aceptarlo, volver a recorrer de nuevo el vector y comprobar si el numero random ya existe en el o no.
Si no existe, lo aceptamos y pasamos a la siguiente posicion.
Si existe, entonces lo descartamos, volvemos  a generar otro y repetimos la misma comprobacion.. así hasta que se genere un numero que no exista.

Entonces, para hacer esto, se necesitaría tres bucles anidados:

Primero, un bucle for que recorra las posiciones del vector, una a una...

Segundo, un bucle do...while donde se generarán números random mientras dichos números estén siendo descartados. Solo se detendrá cuando el número random haya sido aceptado.

Tercero, otro bucle for (uso un for each en este caso) que recorre todo el vector y comprueba si el numero random existe o no.
Si existe, indicaremos al bucle while que el número ha sido descartado para que siga repitiendose.
Si no existe, lo aceptamos  y le indicaremos al while que ya puede terminar.

Esto se lo comunicaremos con una variable booleana, que yo he llamado descartado

Te adjunto un programa donde se hace esto, para que lo veas y decidas si quieres incluirlo en tu programa.

Por curiosidad, he incluido un contador de numeros descartados. Así al final del programa se muestran los números generados al azar y también se informa de cuantos números han sido descartados durante el proceso.


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

public final class SinRepetir {

public static void main(String[] args) {
Random rn = new Random();
int[] numeros = new int[10];//Aqui indicamos cuantos queremos generar, 10 en este caso
boolean descartado;
int contDescartados = 0; //Por curiosidad, contaremos cuantos numeros random serán descartados

/*
* Recorreremos las posiciones del vector una a una.
* Para cada una de ellas, generaremos un numero al azar y antes de aceptarlo
* volveremos a recorrer el vector completo para comprobar si el numero generado
* ya existe en el vector.
* Si no existe, lo aceptaremos y pasaremos a la siguiente posicion.
* Si existe, es decir, está repetido, lo descartaremos y volveremos a generar otro
* hasta que aparezca uno que no exista
*/
for (int i = 0; i < numeros.length; i++)
{
do//Este bucle se repetirá hasta que salga un numero random no repetido, es decir, mientras descartado == true
{
int numeroRandom = rn.nextInt(50) + 1;//Generamos entero entre 1 y 50
descartado = false;//De momento, el numero no está descartado

//Ahora recorremos el vector completo y comprobamos si el numero generado ya existe dentro de él
for (int numVector: numeros)
{
if (numVector == numeroRandom)//EL numero generado ya existe en el vector, hay que descartarlo
{
descartado = true;//Lo descartamos
contDescartados++;//Contamos el descarte, por curiosidad...
break;//Finalizamos bucle for, no hace falta seguir comparando
}
}

//Tras comprobar si el numero estaba repetido, ahora decidimos si aceptamos el numero random generado


if (!descartado)//No ha sido descartado, lo aceptamos. El bucle do..while terminará y pasaremos al siguiente numero del vector
numeros[i] = numeroRandom;
}while (descartado);
}

//Mostramos números generados
for (int n: numeros)
System.out.print(n + " ");

System.out.println("\nSe han descartado " + contDescartados + " numeros random");

}

}
« Última modificación: 19 de Junio 2017, 20:46 por Alex Rodríguez »
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Luis Fdo Carvajal

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 37
    • Ver Perfil
Re:CU00909C Ejercicios 1 y 2
« Respuesta #2 en: 20 de Mayo 2017, 00:39 »
 :)
Gracias por las indicaciones.
Creo que ya hallé la manera.
Código: [Seleccionar]
package loteria;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
/**
 *
 * @author ITCO1724
 */
public class Loteria {

    public static void main(String[] args) {
    int a,b,c,d,e,f;
    int i,j,aux;
    int contadorAciertos = 0;
    int contadorFallos = 0;
    String empezar = "";
   
    int[] random = new int [6];
    int[] numeros = new int[6];
    //int[] randomclon = new int [6];

    Scanner sc = new Scanner(System.in);
    Random rnd = new Random();

 
//Generar seis números a y b entre 1 y 49
    a = rnd.nextInt(50); b = rnd.nextInt(50); c = rnd.nextInt(50); d = rnd.nextInt(50); e = rnd.nextInt(50); f = rnd.nextInt(50);
    random[0] = a; random[1] = b; random[2] = c; random[3] = d; random[4] = e; random[5] = f;
    /*System.out.println(a);  System.out.println(b); System.out.println(c); System.out.println(d);
    System.out.println(e);System.out.println(f);*/
    /*random[0]=rnd.nextInt(50);random[1]=rnd.nextInt(50);random[2]=rnd.nextInt(50);random[3]=rnd.nextInt(50);
    random[4]=rnd.nextInt(50);random[5]=rnd.nextInt(50);*/
   
    //Comparar los elementos del arreglo para no repetir numero
    for ( i= 0; i<=5; i++){
        for (j=i+1; j<=5; j++){
            if ( random[i] == random[j]){
                aux = random[i];
               
                random[i] = random[j+1];
                random[j] = aux;
            }
        }
    }
   
 //Mostrar por pantalla los números random generados   
    for ( i= 0; i<=5; i++){
               System.out.print(random[i]+ ", ");
           }
   
//Ordenar arreglo de menor a mayor
    for ( i= 0; i<=5; i++){
        for (j=i+1; j<=5; j++){
            if ( random[i]>random[j]){
                aux = random[i];
                random[i] = random[j];
                random[j] = aux;
            }
        }
    }

    //presentar arreglo ordenado de menor a mayor
    for ( i= 0; i<=5; i++){
        System.out.print(random[i]);}
do{
    System.out.println();

    System.out.println (" Vamos a jugar a la Lotería primitiva ");
    System.out.print("Introduce tus seis numeros de apuesta entre el 1 y 49 : ");
    System.out.print("No puedes repetir numeros: ");       

    for(i = 0; i <= 5; i++) {
System.out.print("\n"+ "Elige el numero "+ (i+1) + ":" );
numeros[i] = sc.nextInt();}
   
        //Ordenar arreglo de menor a mayor los numeros elegidos
    for ( i= 0; i<=5; i++){
        for (j=i+1; j<=5; j++){
            if ( numeros[i]>numeros[j]){
                aux = numeros[i];
                numeros[i] = numeros[j];
                numeros[j] = aux;
            }
        }
    }
   
//Mostrar por pantalla los números elegidos
    for(i = 0; i <= 5; i++) {   
        System.out.print(numeros[i]);}
        System.out.print("\n"+"La combinación Ganadora es :");
    for(i = 0; i <= 5; i++) {   
        //System.out.print("La combinación Ganadora es :" );
        System.out.print(random[i]);}
//Comparar ambos arreglos
   
    System.out.println (("\n"+"¿Tienen el mismo contenido (relación de igualdad ambas combinaciones)? ... " + Arrays.equals(random, numeros) ) );
    if (Arrays.equals(random, numeros)==true){
        System.out.println("EN HORA BUENA !!!HAS HACERTADO!!");}
    else {
            System.out.println(" !!!No has acertado!!");}
//Comparación de arreglos
           for (i=0; i<6; i++){
               System.out.print ("\n"+"random[" + i +"]= " + random[i] +"; ");
               System.out.print ("\n"+"numeros[" + i +"]= " + numeros[i]+"; "); }
               
            //Arrays.equals(random, numeros);
           if (random[0] != numeros[0] ){
                contadorFallos++;
                System.out.println("\n"+"Has perdido : " + (contadorFallos)+ "Cifra" );}
           else {
                 contadorAciertos++;
                 System.out.println("\n"+"Has acertado : " + (contadorAciertos)+ "Cifra" );}
               
           if (random[1] != numeros[1] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
           else{
                contadorAciertos++;
                System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
                     
                   
           if (random[2] != numeros[2] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
            else {
                  contadorAciertos++;
                  System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
                                         
              if (random[3] != numeros[3] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
             else{
                  contadorAciertos++;
                  System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
                         
           
              if (random[4] != numeros[4] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
                else {
                       contadorAciertos++;
                        System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
             
           if (random[5] != numeros[5] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
            else{
                       contadorAciertos++;
                        System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
               
              if (random[6] != numeros[6] ){
                contadorFallos++;
                System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
                else {
                       contadorAciertos++;
                        System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
             
             
    System.out.println("Quieres probar otra vez ? (s/n) : ");
    empezar = sc.nextLine();                           
            }
   
    while (empezar.equalsIgnoreCase("s"));
    System.out.println("Adios");
    }
   
    }

 

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