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: david82 en 18 de Agosto 2017, 01:12
-
Buenas tardes. Esta es mi solución propuesta al ejercicio planteado CU00909C del curso avanzado de programación Java.
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);}
}
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;
}
}
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!");
}
}
-
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
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