Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: LuisM en 14 de Noviembre 2017, 14:22

Título: Java Ejemplo números aleatorios clase Random. Enteros nextInt lotería CU00909C
Publicado por: LuisM en 14 de Noviembre 2017, 14:22
Hola a todos !! paso a dejar el código de los dos ejercicios de la clase CU00909C del tutorial pdf de programación Java avanzada. Desde ya muchas gracias. Un saludo, Luis

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.

Citar
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


Solución propuesta:

Código: [Seleccionar]
/* Ejemplo uso clase Random() – aprenderaprogramar.com */
import java.util.Random;
import java.util.Scanner;
public class Ejercicio1 {
      public static void main(String arg[ ]) {
           Random rnd = new Random();
           Scanner teclado = new Scanner(System.in);
           String continuar="S";
           String nroElegido="";
           int totalAciertos=0;
           int totalDesaciertos=0;
           String respuesta="";
           do {
               int nroA = rnd.nextInt(10);
               int nroB = rnd.nextInt(10);
               System.out.println("Apuestas por A o por B ?:");
               while(nroA==nroB){
                   nroB = rnd.nextInt(10);
                }

               nroElegido = teclado.next();
               
               while(nroElegido.equalsIgnoreCase("A")==false&&nroElegido.equalsIgnoreCase("B")==false){
                   System.out.println("Apuestas por A o por B ?:");
                   nroElegido = teclado.next();
               }               
               
               if ((nroElegido.equalsIgnoreCase("A")&&nroA>nroB)||(nroElegido.equalsIgnoreCase("B")&&nroB>nroA)){
                   totalAciertos=totalAciertos+1;
                   respuesta="  HAS GANADO!!!";
                } else {totalDesaciertos=totalDesaciertos+1;
                        respuesta="  HAS PERDIDO!!!";
                }
               
               System.out.println("A saca un "+nroA+" y B saca un "+nroB+respuesta);
               System.out.println("Llevas "+totalAciertos+" partidas ganadas y "+totalDesaciertos+" partidas perdidas");

               System.out.println("Quieres probar otra vez ? (S/N):");
               continuar = teclado.next();
                }
           while(continuar.equalsIgnoreCase("S"));
           System.out.println("Adiós");
           //System.out.println("el numero ingresado es :"+inicioRango); 
      }
}


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.

Citar
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]
/* Ejemplo uso clase Random() – aprenderaprogramar.com */
import java.util.*;
public class Ejercicio2 {
      public static void main(String arg[ ]) {
           ArrayList lista = new ArrayList<Integer>();
           Random rnd = new Random();
           Scanner teclado = new Scanner(System.in);
           String continuar="S";
           int[ ] nroElegido = new int[6];
           int[ ] nroLoteria = new int[6];
           int totalAciertos=0;
           int i=0;
           int j=0;
           boolean nroRepetido=false;
           // elección de los números para el sorteo
           do {
               System.out.println("Elige 6 números entre el 1 y el 49.");
               for(i=0;i<6;i++){
                   do{
                       nroRepetido=false;
                       System.out.print("Elige el número "+(i+1)+" : ");               
                       nroElegido[i]=Integer.parseInt(teclado.next());
                       for (j=0;j<i;j++){
                           if (nroElegido[i]==nroElegido[j]){nroRepetido=true;}
                        }
                    }   
                   while(nroElegido[i]<1||nroElegido[i]>49||nroRepetido==true);
                }
               // ordena la lista de nros elegidos
               lista.clear();
               for (i=0;i<6;i++){lista.add(nroElegido[i]);}
               Collections.sort(lista);
               for (i=0;i<6;i++){nroElegido[i]=(int)lista.get(i);}
               // muestra los nros elegidos
               System.out.print("Los números elegidos son :");
               for (i=0;i<6;i++){
                   System.out.print(nroElegido[i]);
                   if(i==5){System.out.println("");} else {System.out.print(", ");}
                }
               // se realiza el sorteo de la loteria
               i=0;
               do {
                   nroLoteria[i] = rnd.nextInt(49)+1;
                   nroRepetido=false;
                   for (j=0;j<i;j++){
                       if (nroLoteria[i]==nroLoteria[j]){nroRepetido=true;}
                   }
                   if (nroRepetido==false) {i++;}
               }
               while(i<6);
               // ordena los numeros sorteados por la Loteria
               lista.clear();
               for (i=0;i<6;i++){lista.add(nroLoteria[i]);}
               Collections.sort(lista);
               for (i=0;i<6;i++){nroLoteria[i]=(int)lista.get(i);}
               // muestra los nros de la loteria
               System.out.print("Combinación ganadora :");
               for (i=0;i<6;i++){
                System.out.print(nroLoteria[i]);
                if(i==5){System.out.println("");} else {System.out.print(", ");}
                }
               // control de nros ganadores
               totalAciertos=0;
               for (i=0;i<6;i++){
                   for (j=0;j<6;j++){
                        if(nroElegido[i]==nroLoteria[j]){ totalAciertos = totalAciertos+1;}
                    }
                }
               System.out.println("Has acertado: "+totalAciertos+" números");
               System.out.print("Quieres probar otra vez?(S/N):");
               continuar = teclado.next();               
           } 
           while(continuar.equalsIgnoreCase("S"));
           System.out.println("Adiós");
           //System.out.println("el numero ingresado es :"+inicioRango); 
      }
}
Título: Re:Java Ejemplo números aleatorios clase Random. Enteros nextInt lotería CU00909C
Publicado por: Ogramar en 04 de Marzo 2018, 15:03
Buenas LuisM el ejercicio 1 lo he repasado y funciona perfectamente y está bien planteado.

El ejercicio 2 me lanza un warning en compilación indicando Ejercicio2.java uses unchecked or unsafe operations. Recompile with -Xlintunchecked for details. Esto creo que sea debido a alguno de los casting que utilizas. Este ejercicio funciona también perfectamente. Veo un tanto extraño mantener por un lado los datos en un array tradicional y por otro usar un ArrayList para ordenar los datos. Creo que sería más "limpio" o bien trabajarlo todo en forma de ArrayList o bien usar una ordenación de arrays implementada manualmente. Pero eso no era el objetivo del ejercicio (cuyo objetivo era trabajar los aleatorios) así que todo bien.

Salu2