Autor Tema: Java código juego lotería primitiva números aleatorios clase Random CU00909C  (Leído 10081 veces)

david82

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
Buenas tardes. Esta es mi solución propuesta al ejercicio planteado CU00909C del curso avanzado de programación Java.

Código: [Seleccionar]
package estandar;
import java.util.Scanner;

public class EntradaDeTeclado {
private String entrada;
private Scanner entradaTeclado;

public EntradaDeTeclado() {
entrada = "";
entradaTeclado=new Scanner(System.in);
}

public void setEntrada(){entrada = entradaTeclado.nextLine();}

public String getEntrada(){return entrada;}
public int getEntero(){return Integer.valueOf(entrada);}
public double getDecimal(){return Double.valueOf(entrada);}

}

Código: [Seleccionar]
package intermedio.ejercicios;
import java.util.Random;
import java.util.Arrays;

public class LoteriaPrimitiva {
private int [] numerosSorteo;
private int numeroAciertos;
private int i,j;
private boolean repetido;
Random tombola = new Random();

public LoteriaPrimitiva(int cantidadNumeros){
numeroAciertos=0;
repetido=false;
numerosSorteo = new int[cantidadNumeros];
numerosSorteo[0]=0;
setNumerosSorteo();
}

public void setNumerosSorteo(){
for(i=0;i<numerosSorteo.length;i++)
numerosSorteo[i]=tombola.nextInt(49)+1;
Arrays.sort(numerosSorteo); //método de la API de Java que ordena un array de menor a mayor
}

public void getNumerosSorteo(){
for(i=0;i<numerosSorteo.length;i++)
System.out.print(numerosSorteo[i]+" ");
System.out.println();
}

public void getNumerosSorteo(int[] numerosApuesta){
Arrays.sort(numerosApuesta);
for(i=0;i<numerosApuesta.length;i++)
System.out.print(numerosApuesta[i]+" ");
System.out.println();
}

public boolean comprobarApuesta(int numeroApostado,int[] numerosApuesta){
for(i=0;i<numerosApuesta.length;i++){
if(numeroApostado==numerosApuesta[i]){
repetido = true;
break;
}
else
repetido = false;
}
return repetido;
}

public int numeroDeAciertos(int[]numerosApuesta){
for(i=0;i<numerosSorteo.length;i++)
for(j=0;j<numerosSorteo.length;j++){
if(numerosApuesta[i]==numerosSorteo[j])
numeroAciertos++;
else{}
}
return numeroAciertos;
}
}

Código: [Seleccionar]
package intermedio.ejercicios;

import estandar.EntradaDeTeclado;

public class TestLoteriaPrimitiva {

public static void main(String[] args) {
EntradaDeTeclado entrada = new EntradaDeTeclado();
int apuesta;

do{
LoteriaPrimitiva loteria = new LoteriaPrimitiva(6);
int[] numerosApostados = new int[6];

System.out.println("Introduzca 6 números del 1 al 50 sin repetir ninguno: ");

for(int i=0;i<6;i++){
entrada.setEntrada();
apuesta = entrada.getEntero();
while(apuesta<1 || apuesta>50){
System.out.println("Número no permitido, intente de nuevo!!");
entrada.setEntrada();
apuesta=entrada.getEntero();
}
while(loteria.comprobarApuesta(apuesta, numerosApostados)==true){
System.out.println("El número apostado ya está en la lista. Intente con otro...");
entrada.setEntrada();
apuesta = entrada.getEntero();
}
numerosApostados[i]=apuesta;
}

System.out.println("Los números ganadores son: ");
loteria.getNumerosSorteo();
System.out.println("Los números apostados fueron: ");
loteria.getNumerosSorteo(numerosApostados);
System.out.println();
System.out.println("Usted tuvo "+loteria.numeroDeAciertos(numerosApostados)+" aciertos");
System.out.println();
System.out.println("Quiere intentar otra vez (S/N)? ");
entrada.setEntrada();
}while(entrada.getEntrada().toUpperCase().equals("S"));
System.out.println("Adios!");
}
}
« Última modificación: 22 de Septiembre 2017, 19:36 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas, el código se ve bien planteado, bien organizadas las clases y métodos, etc.

Algunas observaciones: un método get se usa para recuperar algo (con un return), por eso este método no estaría bien nombrado

Código: [Seleccionar]
public void getNumerosSorteo(){
for(i=0;i<numerosSorteo.length;i++)
System.out.print(numerosSorteo[i]+" ");
System.out.println();
}

Este método sería preferible que se nombrara como mostrarNumerosSorteo o de forma similar. get y set son palabras reservadas para recuperar y establecer (normalmente atributos de la clase). No deben usarse para otra cosa estos nombres porque contravienen los convenios que usan todos los programadores.

Otra cosa a cambiar sería en System.out.println("Introduzca 6 números del 1 al 50 sin repetir ninguno: "); debe decir del 1 al 49 en lugar del 1 al 50

Esto hace que para ajustarse a lo que se pedía habría que corregir otras partes del código por ejemplo while(apuesta<1 || apuesta>50)

Con tombola.nextInt(49)+1; si no me equivoco estás generando números del 1 al 49 (ya que serían entre 0 y 48, y al sumarle 1 te queda entre 1 y 49) con lo cual no cuadra con que se permita elegir el 50

Salu2

 

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