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: @mayakoski en 11 de Febrero 2020, 14:38
-
Buenos días a continuación dejo el codigo de los dos ejercicios planteados en la clase CU00909C del tutorial de programación pdf Java avanzado.
Ejercicio 1
package claseCU00908C;
import java.util.Random;
import java.util.Scanner;
public class EjercicioCU00909C1 {
public static void main(String[] args) {
int numA, numB;
int pGanadas=0, pPerdidas=0;
Scanner entradaTeclado = new Scanner(System.in);
Random rnd = new Random();
char seleccion;
boolean valida = false;
do {
do {
numA = (int)(rnd.nextDouble()*11);
numB = (int)(rnd.nextDouble()*11);
}while(numA==numB);
System.out.print("Apuestas por A o por B ? :");
do {
seleccion = entradaTeclado.next().toUpperCase().charAt(0);
if((seleccion == 'A') || (seleccion == 'B')) {
valida = true;
}else {
System.out.print("Elija opcion valida por A o por B ? ");
}
}while(!valida);
System.out.print("A saca un " + numA + " y B saca un " + numB);
if(seleccion =='A' && (numA > numB) || seleccion =='B' && (numB > numA) ) {
System.out.println(" HAS GANADO!!!");
pGanadas+=1;
}else {
System.out.println(" HAS PERDIDO!!!");
pPerdidas+=1;
}
System.out.println("Llevas " + pGanadas + " partidas ganadas y " + pPerdidas + " partidas perdidas");
System.out.print("Quieres probar otra vez ? (S/N) : ");
} while(entradaTeclado.next().toUpperCase().equals("S"));
}
}
Ejercicio 2
package claseCU00908C;
import java.util.Random;
import java.util.Scanner;
public class EjercicioCU00909C2 {
static Scanner entradaTeclado = new Scanner(System.in);
public static void main(String[] args) {
int[] numerosUsuario = new int[6];
int[] numerosGanadores = new int[6];
do {
System.out.println("Elije 6 numero entre el 1 y el 49");
creaNumeros(numerosUsuario, numerosGanadores);
System.out.print("Numero Elejidos : ");
imprimeNumeros(numerosUsuario);
System.out.print("Combinacion ganadora :");
imprimeNumeros(numerosGanadores);
verificaAciertos(numerosUsuario, numerosGanadores);
System.out.print("Quieres probar otra vez? (S/N): ");
} while(entradaTeclado.next().toUpperCase().equals("S"));
System.out.println("Adios");
}
public static void creaNumeros(int[] pNumerosUsuario, int[] pNumerosGanadores) {
Random rnd = new Random();
for (int i = 0; i < pNumerosUsuario.length; i++) {
System.out.print("Elije el numero " + (i+1) + ": ");
pNumerosUsuario[i] = entradaTeclado.nextInt();
while((pNumerosUsuario[i] < 1) || (pNumerosUsuario[i] > 49)) {
System.out.print("El numero esta fuera de rango, elije otro: ");
pNumerosUsuario[i] = entradaTeclado.nextInt();
}
for (int j = 0; j < i; j++) {
while((pNumerosUsuario[j]==pNumerosUsuario[i])) {
System.out.print("El numero ya esta ingresado, elije otro: ");
pNumerosUsuario[i] = entradaTeclado.nextInt();
}
}
pNumerosGanadores[i] = (int) (rnd.nextDouble()*50);
//System.out.println(pNumerosGanadores[i]);
}
}
public static void imprimeNumeros(int[] pListaNumeros) {
for (int i = 0; i < pListaNumeros.length; i++) {
System.out.print(pListaNumeros[i] + " ");
}
System.out.println();
}
public static void verificaAciertos(int[] pNumerosUsuario, int[] pNumerosGanadores) {
int aciertos = 0;
for (int i = 0; i < pNumerosGanadores.length; i++) {
for (int j = 0; j < pNumerosUsuario.length; j++) {
if(pNumerosGanadores[i] == pNumerosUsuario[j]) {
aciertos += 1;
}
}
}
System.out.println("Has acertado: " + aciertos + " números");
}
}
Saludos
-
Buenas, para quien revise este hilo, el ejercicio 1 está bien resuelto. No obstante usar algo como numA = (int)(rnd.nextDouble()*11); parece poco elegante, en el sentido de que se genera un double para luego hacer un casting a un entero. ¿Por qué no generar directamente el entero y ahorrarnos el casting? Tampoco tiene demasiada importancia, pero ahí queda como reflexión.
En el ejercicio 2 además de lo indicado hay un defecto. El ejercicio pedía "que introduzca 6 números enteros comprendidos entre el 1 y el 49 ambos incluidos."
Por tanto los números válidos son del 1 al 49.
Sin embargo para crear los números ganadores en el código se utiliza
pNumerosGanadores[ i ] = (int) (rnd.nextDouble()*50);
¿Qué ocurre si el método nextDouble nos devuelve 0? Un número ganador sería el 0, pero esto no es conforme a lo que dice el enunciado.
De hecho, lo he comprobado y haciendo pruebas me ha salido por ejemplo Combinacion ganadora :31 40 37 39 2 0 donde vemos que aparece el cero, que no es correcto.
Otro aspecto que sería deseable es que los resultados de la combinación ganadora se mostraran en orden ascendente. Por ejemplo en lugar de Combinacion ganadora :12 9 42 16 43 11
que saliera Combinacion ganadora :9 11 12 16 42 43
Puede verse una solución correcta para este ejercicio en https://aprenderaprogramar.com/foros/index.php?topic=5682.0
Salu2
-
Saludos
He modificado el código en base a las observaciones, es correcto que no hay razón de generar un double para pasarlo a integer, y he corregido la generación de 0 en la lotería primitiva, además de colocar ordenado el arreglo de la combinación ganadora
Saludos
Ejercicio 1.
package claseCU00908C;
import java.util.Random;
import java.util.Scanner;
public class EjercicioCU00909C1 {
public static void main(String[] args) {
int numA, numB;
int pGanadas=0, pPerdidas=0;
Scanner entradaTeclado = new Scanner(System.in);
Random rnd = new Random();
char seleccion;
boolean valida = false;
do {
do {
numA = rnd.nextInt(100);
numB = rnd.nextInt(100);
}while(numA==numB);
System.out.print("Apuestas por A o por B ? :");
do {
seleccion = entradaTeclado.next().toUpperCase().charAt(0);
if((seleccion == 'A') || (seleccion == 'B')) {
valida = true;
}else {
System.out.print("Elija opcion valida por A o por B ? ");
}
}while(!valida);
System.out.print("A saca un " + numA + " y B saca un " + numB);
if(seleccion =='A' && (numA > numB) || seleccion =='B' && (numB > numA) ) {
System.out.println(" HAS GANADO!!!");
pGanadas+=1;
}else {
System.out.println(" HAS PERDIDO!!!");
pPerdidas+=1;
}
System.out.println("Llevas " + pGanadas + " partidas ganadas y " + pPerdidas + " partidas perdidas");
System.out.print("Quieres probar otra vez ? (S/N) : ");
} while(entradaTeclado.next().toUpperCase().equals("S"));
}
}
Ejercicio 2.
package claseCU00908C;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class EjercicioCU00909C2 {
static Scanner entradaTeclado = new Scanner(System.in);
public static void main(String[] args) {
int[] numerosUsuario = new int[6];
int[] numerosGanadores = new int[6];
do {
System.out.println("Elige 6 numero entre el 1 y el 49");
elegirNumeros(numerosUsuario, numerosGanadores);
System.out.print("Numero Elegidos: ");
imprimeNumeros(numerosUsuario);
System.out.print("Combinacion ganadora: ");
imprimeNumeros(numerosGanadores);
verificaAciertos(numerosUsuario, numerosGanadores);
System.out.print("Quieres probar otra vez? (S/N): ");
} while(entradaTeclado.next().toUpperCase().equals("S"));
System.out.println("Adios");
}
public static void elegirNumeros(int[] pNumerosUsuario, int[] pNumerosGanadores) {
Random rnd = new Random();
for (int i = 0; i < pNumerosUsuario.length; i++) {
System.out.print("Elije el numero " + (i+1) + ": ");
pNumerosUsuario[i] = entradaTeclado.nextInt();
while((pNumerosUsuario[i] < 1) || (pNumerosUsuario[i] > 49)) {
System.out.print("El numero esta fuera de rango, elije otro: ");
pNumerosUsuario[i] = entradaTeclado.nextInt();
}
for (int j = 0; j < i; j++) {
while((pNumerosUsuario[j]==pNumerosUsuario[i])) {
System.out.print("El numero ya esta ingresado, elije otro: ");
pNumerosUsuario[i] = entradaTeclado.nextInt();
}
}
pNumerosGanadores[i] = rnd.nextInt(49)+1;
//System.out.println(pNumerosGanadores[i]);
}
Arrays.sort(pNumerosGanadores);
}
public static void imprimeNumeros(int[] pListaNumeros) {
for (int i = 0; i < pListaNumeros.length; i++) {
System.out.print(pListaNumeros[i] + " ");
}
System.out.println();
}
public static void verificaAciertos(int[] pNumerosUsuario, int[] pNumerosGanadores) {
int aciertos = 0;
for (int i = 0; i < pNumerosGanadores.length; i++) {
for (int j = 0; j < pNumerosUsuario.length; j++) {
if(pNumerosGanadores[i] == pNumerosUsuario[j]) {
aciertos += 1;
}
}
}
System.out.println("Has acertado: " + aciertos + " números");
}
}