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
-
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.
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:
/* 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.
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
/* 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);
}
}
-
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