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: pedro,, en 15 de Diciembre 2016, 13:32
-
Hola, aquí dejo una posible solución a los dos ejercicios de la unidad CU00909C del curso avanzado de programación Java
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
Clase TestApuestaPorUnNumero
public class TestApuestaPorUnNumero {
public static void main(String[] args) {
GeneradorDeNumerosAleatorios generador = new GeneradorDeNumerosAleatorios(1, 100);
EntradaDeTeclado entrada = new EntradaDeTeclado();
Marcador marcador = new Marcador();
char otraVez;
int numA, numB;
char apuesta;
do{
numA = generador.getNumeroAleatorio();
numB = generador.getNumeroAleatorio();
while(numA == numB) {
numB = generador.getNumeroAleatorio();
}
System.out.println(numA + "; " +numB);
System.out.print("¿Apuestas por A o por B? ");
apuesta = entrada.getChar();
while(apuesta != 'a' && apuesta != 'A' && apuesta != 'b' && apuesta != 'B') {
System.out.println(numA + "; " +numB);
System.out.print("Apuesta erronea, apueste otra vez!!!.\n¿Apuestas por A o por B? ");
apuesta = entrada.getChar();
}
System.out.print("A saca un " + numA + " y B saca un " + numB);
if((numA > numB && (apuesta == 'A' || apuesta == 'a')) ||
(numB > numA && (apuesta == 'B' || apuesta == 'b'))) {
marcador.addAcierto();
System.out.print("\tHAS GANADO!!!\n");
} else {
marcador.addError();
System.out.print("\tHAS PERDIDO!!!\n");
}
marcador.addPartida();
System.out.println("Llevas " + marcador.getPartidas() + " partidas. Has ganado " +
marcador.getAciertos() + " y perdido " + marcador.getErrores() + ".");
System.out.println("¿Quieres apostar otra vez? (S/N): ");
otraVez = entrada.getChar();
} while(otraVez == 's' || otraVez == 'S');
System.out.println("Adiós");
}
}
Clase Marcador
public class Marcador {
private int aciertos;
private int errores;
private int numPartidas;
public Marcador() {
aciertos = 0;
errores = 0;
numPartidas = 0;
}
public void setAciertos(int aciertos) {
this.aciertos = aciertos;
}
public void setErrores(int errores) {
this.errores = errores;
}
public void setNumPartidas(int numPartidas) {
this.numPartidas = numPartidas;
}
public int getAciertos() {
return aciertos;
}
public int getErrores() {
return errores;
}
public int getPartidas() {
return numPartidas;
}
public void addAcierto() {
aciertos++;
}
public void addError() {
errores++;
}
public void addPartida() {
numPartidas++;
}
}
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
Clase TestLoteriaPrimitiva
public class TestLoteriaPrimitiva {
public static void main(String[] args) {
GeneradorDeNumerosAleatorios generador = new GeneradorDeNumerosAleatorios(1, 49);
EntradaDeTeclado entrada = new EntradaDeTeclado();
ListaDeEnteros combinacionGanadora;
ListaDeEnteros apuesta;
int numeroCombinacion, numeroApuesta, aciertos;
char otraVez = 'n';
do{
aciertos = 0;
combinacionGanadora = new ListaDeEnteros();
apuesta = new ListaDeEnteros();
for(int i = 0; i < 6; i++) { // Crea la combinación ganadora
numeroCombinacion = generador.getNumeroAleatorio();
while(combinacionGanadora.getSiListaContiene(numeroCombinacion)){ // Comprueba que no se repita ningún número
numeroCombinacion = generador.getNumeroAleatorio();
}
combinacionGanadora.addNumero(numeroCombinacion);
}
System.out.println("Elija 6 números entre el 1 y el 49.");
for(int i = 0; i < 6; i++) {// Solicita seis números al usuario
System.out.print("Elija el numero " + (i+1) + ": ");
numeroApuesta = entrada.getInt();
while(apuesta.getSiListaContiene(numeroApuesta) == true ||
numeroApuesta < 1 || numeroApuesta > 49){ // Comprueba que no se repitan los números introducidos por el usuario
System.out.print("El número introducido está fuera de ragon o repetido." +
"\nElija el numero " + (i+1) + ": ");
numeroApuesta = entrada.getInt();
}
apuesta.addNumero(numeroApuesta);
}
for(int i = 0; i < combinacionGanadora.getSize(); i++) { // Compara la combinación ganadora con la apuesta
if(apuesta.getSiListaContiene(combinacionGanadora.getContenidoPosicion(i))){
aciertos++;
}
}
System.out.println("Número elegidos: " + apuesta.getContenidoCombinacion());
System.out.println("Combinación ganadora: " + combinacionGanadora.getContenidoCombinacion());
System.out.println("Has acertado: " + aciertos + " números.");
System.out.print("¿Quieres probar otra vez? (S/N): ");
otraVez = entrada.getChar();
} while(otraVez == 's' || otraVez == 'S');
System.out.println("Adiós");
}
}
Clase ListaDeEnteros
import java.util.ArrayList;
public class ListaDeEnteros {
private ArrayList <Integer> listaEnteros;
public ListaDeEnteros() {
listaEnteros = new ArrayList <>();
}
public void addNumero(int numero) {
listaEnteros.add(numero);
}
public ArrayList<Integer> getNumero() {
return listaEnteros;
}
public boolean getSiListaContiene(int numero) {
return listaEnteros.contains(numero);
}
public int getSize() {
return listaEnteros.size();
}
public int getContenidoPosicion(int index) {
return listaEnteros.get(index);
}
public String getContenidoCombinacion(){
String msg = "";
for(int numero: listaEnteros) {
msg += numero + " ";
}
return msg;
}
}
Aquí dejo dos clases más que se usan en ambos ejercercicios.
Clase GeneradorDeNumerosAleatorios
import java.util.Random;
public class GeneradorDeNumerosAleatorios {
private Random rnd;
private int limiteRango1;
private int limiteRango2;
public GeneradorDeNumerosAleatorios() {
rnd = new Random();
this.limiteRango1 = 0;
this.limiteRango2 = 0;
}
public GeneradorDeNumerosAleatorios(int limiteRango1) {
rnd = new Random();
this.limiteRango1 = limiteRango1;
this.limiteRango2 = 0;
}
public GeneradorDeNumerosAleatorios(int limiteRango1, int limiteRango2) {
rnd = new Random();
this.limiteRango1 = limiteRango1;
this.limiteRango2 = limiteRango2;
}
public void setLimiteRango1(int limiteRango1) {
this.limiteRango1 = limiteRango1;
}
public void setLimiteRango2(int limiteRango2) {
this.limiteRango2 = limiteRango2;
}
public int getLimiteRango1() {
return limiteRango1;
}
public int getLimiteRango2() {
return limiteRango2;
}
public int getNumeroAleatorio() {
if(limiteRango1 < limiteRango2) {
return rnd.nextInt(limiteRango2 - limiteRango1 + 1) + limiteRango1;
} else {
return rnd.nextInt(limiteRango1 - limiteRango2 + 1) + limiteRango2;
}
}
}
Clase EntradaDeTeclado
import java.util.Scanner;
public class EntradaDeTeclado {
Scanner entradaDeTeclado;
public EntradaDeTeclado () {
entradaDeTeclado = new Scanner(System.in);
}
public String getString () {
return entradaDeTeclado.nextLine();
}
public int getInt() {
return Integer.parseInt(entradaDeTeclado.nextLine());
}
public double getDouble() {
return Double.parseDouble(entradaDeTeclado.nextLine());
}
public char getChar() {
String entrada = entradaDeTeclado.nextLine();
if(entrada.equals("")){
return ' ';
} else {
return entrada.charAt(0);
}
}
}
Saludos. ;D
-
Buenas, como antes muy buen código
En TestApuestaPorUnNumero al jugar nos muestra previamente los números, con lo cual ya sabemos por quién apostar :) Para jugar sin conocer el resultado simplemente comentar esta línea en esa clase:
//System.out.println(numA + "; " +numB);
Salu2
-
Ups!!, se me olvidó quitar esa línea.
Gracias por la corrección Ogramar.
Saludos. ;D