Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: LuisSanabria en 12 de Noviembre 2016, 19:29
-
Buenas!! Este es mi primer post! y antes que nada quisiera agradecerles a los profesores, compañeros por el tiempo y esfuerzo empleado en enseñar, difundir, corregir este curso... Lo poco (que para mi es muchisimo) que he avanzado se lo debo a ustedes muchachos!! Muchas gracias y felicitaciones!!
Como veran soy novato (super novato) en el arte de la programacion! asi que no se sorprendan si aparece cualquier burrada por aqui!! ;D :D
Ejercicio 2 CU00909C del curso avanzado de Java
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
import java.util.Scanner;
/**
*
* @author usuario
*/
public class EntradaTeclado {
private int entradaInt;
private String entradaStr;
Scanner sc = new Scanner(System.in);
Scanner scStr = new Scanner(System.in);
public EntradaTeclado() {
entradaInt = 0;
entradaStr = "";
}
public void setEntradaInt() {
entradaInt = sc.nextInt();
}
public int getEntradaInt() {
return entradaInt;
}
public void setEntradaStr() {
entradaStr = scStr.nextLine();
}
public String getEntradaStr() {
return entradaStr;
}
}
Algunos metodos de esta clase lo consegui investigando un poco por internet.. asi que no crean que salió de este cerebruto!! ;D ;D
import java.util.Arrays;
public class DatosUnicos {
private int vector[];
private EntradaTeclado entrada1;
public DatosUnicos(){
vector=new int[6];
entrada1= new EntradaTeclado();
}
public int generarAle(int min,int max){
return (int)((max-min+1)*Math.random()+min);
}
public int buscar(int n){
for(int i=0;i<vector.length;i++){
if(vector[i]==n){
System.out.println("Numero repetido... Por favor elija otro numero: ");
return i;
}
}
return -1;
}
public void llenarDatosAle(){
int n;
for(int i=0;i<vector.length;i++){
do{
n=generarAle(1,49);
}while(buscar(n)!=-1);
vector[i]=n;
}
}
public void llenarDatos(){
System.out.println("Elige 6 numeros entre el 1 y el 49.");
int n;
for(int i=0;i<vector.length;i++){
System.out.print("Elije el numero " + (i + 1) + ": ");
do{
entrada1.setEntradaInt();
n=entrada1.getEntradaInt();
}while(buscar(n)!=-1);
vector[i]=n;
}
}
public String mostrarDatos(){
return Arrays.toString(vector);
}
public int getVectorElemento(int e){
return vector[e];
}
public void ordenar(){
Arrays.parallelSort(vector);
}
}
La clase main
public class MainLoteria {
public static void main(String[] args) {
EntradaTeclado entrada = new EntradaTeclado();
DatosUnicos cg = new DatosUnicos();
DatosUnicos numElegidos = new DatosUnicos();
String continuar;
cg.llenarDatosAle();
cg.ordenar();
do {
int acertados = 0;
numElegidos.llenarDatos();
numElegidos.ordenar();
System.out.println("Numeros elegidos " + numElegidos.mostrarDatos());
System.out.println("Combinacion ganadora " + cg.mostrarDatos());
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 6; j++) {
if (cg.getVectorElemento(i) == numElegidos.getVectorElemento(j)) {
acertados++;
}
}
}
if (acertados != 0) {
System.out.println("¡Has acertado: " + acertados + " nùmeros!");
} else {
System.out.println("¡No has acertado ningun numero");
}
System.out.println("Quieres probar otra vez?(S/N): ");
entrada.setEntradaStr();
continuar = entrada.getEntradaStr();
} while (continuar.equalsIgnoreCase("s"));
System.out.println("Adios");
}
}
-
Buenos días.
El ejercicio es correcto.El único problema que le veo es que cuando le das a probar otra vez,la combinación ganador que sale vuelve a ser la misma.Además si eliges algún número que ya hubieras elegido en la combinación anterior,te dice que ya está repetido.
Esto se puede solucionar metiendo dentro del do las líneas cg.llenarDatosAle();
cg.ordenar();
en el main.Así cada vez que le des a probar de nuevo te creara una combinación nueva.
Ademas en los métodos llenarDatosAle() y llenarDatos() debes meter la línea vector=new int[6];
para iniciar el vector en cada intento.
Un saludo
-
Buenas! Gracias por sus correcciones! :) Efectivamente olvide volver a poner dentro del do esas lineas... :-[ es que necesitaba tener y saber una sola combinacion ganadora para ir testeando el comportamiento en caso de acertar los numeros.. cosa que tambien podría haberlo hecho con un cg.mostraDatos() luego de llenar y ordenar (para saber la cobinacion antes de ingresar los numeros por teclado).. ;D
En el referente a los metodos llenarDatosAle() y llenarDatos() quedaría asi no:?
import java.util.Arrays;
public class DatosUnicos {
private int vector[];
private EntradaTeclado entrada1;
public DatosUnicos(){
vector=new int[6];
entrada1= new EntradaTeclado();
}
public int generarAle(int min,int max){
return (int)((max-min+1)*Math.random()+min);
}
public int buscar(int n){
for(int i=0;i<vector.length;i++){
if(vector[i]==n){
System.out.println("Numero repetido... Por favor elija otro numero: ");
return i;
}
}
return -1;
}
public void llenarDatosAle(){
vector=new int[6];
int n;
for(int i=0;i<vector.length;i++){
do{
n=generarAle(1,49);
}while(buscar(n)!=-1);
vector[i]=n;
}
}
public void llenarDatos(){
vector=new int[6];
System.out.println("Elige 6 numeros entre el 1 y el 49.");
int n;
for(int i=0;i<vector.length;i++){
System.out.print("Elije el numero " + (i + 1) + ": ");
do{
entrada1.setEntradaInt();
n=entrada1.getEntradaInt();
}while(buscar(n)!=-1);
vector[i]=n;
}
}
public String mostrarDatos(){
return Arrays.toString(vector);
}
public int getVectorElemento(int e){
return vector[e];
}
public void ordenar(){
Arrays.parallelSort(vector);
}
}
-
Buenas tardes.
Si quedarian asi.
Un saludo
-
en donde compilan ustedes por en eclipse me sale un error
-
Buenos días.
En BlueJ y en Eclipse.
Para que te funcione tienes que coger las clases MainLoteria y EntradaTeclado de la primera entrada de este hilo,y la clase DatosUnicos de la última entrada.
Un saludo