Hola amigos, tengo un problema. Un profesor nos ha mandado "jugar la lotería" con un boleto que siempre contiene los mismos números (los números van entre 1 y 49). Entonces su intención es averiguar el número de dias, meses, etc que se tarda en realizar n coincidencias (máximo 6 coincidencias). Entonces, mi problema reside en la comparación de número random generado y los que ya tengo en el vector. He probado mil métodos y no doy con el adecuado, si me pudiérais ayudar os lo agradezco.
package sorteo;
import java.util.Random;
import java.util.Scanner;
public class Sorteo {
public static void main(String[] args) {
int i,j,contador = 0,semanas=0,n;
int numeros[]=new int[6];
int boleto[]=new int[6];
Scanner s= new Scanner(System.in);
System.out.println("Dame número de coincidencias");
n=s.nextInt();
//Boleto predefinido
boleto[0]=1;
boleto[1]=3;
boleto[2]=15;
boleto[3]=35;
boleto[4]=39;
boleto[5]=40;
Random rnd=new Random();
//Generar números aleatorios
while(contador!=n){
semanas++;
contador=0;
for( i=0;i<6;i++){
int x=(int)(rnd.nextInt(49-1+1)+1);
if(i==0)//Sólo para la primera posición del vector
numeros[i]=x;
else{
for(j=0;j<i;j++){
if((numeros[j]!=x)){//Comparación de número generado con el del vector
numeros[i]=x;
}
else{
i--;
//j=6;
}
}
}
}
//Ver numeros del vector aleatorios
for(i=0;i<6;i++)
System.out.println(numeros[i]);
System.out.println("------------------------------------");
//Comparar números del boleto aleatorio del fijo
for(i=0;i<6;i++){
for(j=0;j<6;j++){
if((boleto[i])==(numeros[j])) {
contador++;
}
}
}
//System.out.println("Contador"+contador);
}
// System.out.println("Contador"+contador);
System.out.println("Las semanas han sido: "+semanas);
double meses,años,siglos;
meses=semanas/4;
años=meses/12;
siglos=años/100;
System.out.println(meses+" meses");
System.out.println(años+" años");
System.out.println(siglos+" siglos");
}
}
Modifiqué el mensaje, para que tu codigo sea más legible usa las etiquetas GeSHi
No estoy seguro si existe un método como ese. Si es así seguramente este en Arrays o en alguna de esas clases utilizadas para ordenar elementos.
De todas maneras, no entiendo porque te complicas tanto. Quieres un método que compare un int[] con otro int[]? pues bien... Porque no lo haces tu?
public static boolean comparator(int[] a, int[] b){
if (a.length != b.length) {return false;}
for (int i = 0; i < a.length; i++) {
if (a[i] != b[i]) {return false;}
}
return true;
}
Ese método comparara que tengan exactamente los mismos elementos en la misma posición.
Suerte. Cualquier duda nos dices.
Hola y gracias por contestar, el profesor quiere que desarrollemos métodos para poder resolver este tipo de problemas sin la clase boolean, entonces es por ello que me estoy dejando tantísimo el cerebro en este programa (aparentemente casi sin solución porque...)
Entonces me veo obligado a hacer varios if y else, pero no me da mucho resultado.
De nuevo, gracias por contestar.
Cita de: piete2 en 21 Febrero 2015, 14:11 PM
el profesor quiere que desarrollemos métodos para poder resolver este tipo de problemas sin la clase boolean...
¿Eso te ha dicho el profesor? Vaya, sin comentarios. Boolean no te ayuda en absolutamente nada, sólo sirve para evaluar condiciones o colocar flags para indicar si un estado es verdadero o no, si un proceso se pudo ejecutar o no.
public int[] matches(int[] tickets, int[] system) {
// utilizamos una lista porque no sabemos la cantidad de aciertos.
List<Integer> matches = new ArrayList<>();
if(ticket.length < system.length) {
javax.swing.JOptionPane.showMessageDialog(null, "Hace falta marcar números en su boleto");
return;
}
for(byte i=0; i<tickets.length; i++) {
for(byte k=0; k<system.length; k++) {
if(tickets[i] == system[k])
matches.add(tickets[i]);
}
}
return matches;
}
List<Integer> matches = matches(tickets, system);
if(matches.size() == system.length) {
// si los tamaños son iguales hay match
javax.swing.JOptionPane.showMessageDialog(null, "¡Felicidades, ha ganado el premio mayor!");
} else {
String numbers = "";
for(Integer i : matches) {
numbers += i+"\n";
}
javax.swing.JOptionPane.showMessageDialog(null, "Ha tenido "+matches.size()+" aciertos:\n\n"+numbers);
}
Muchísimas gracias de verdad, me habéis salvado la vida entre todos, ya está resuelto :D
Os agradezco de corazón lo que habéis hecho por mi!!
De nada. Si tienes un minuto, colócale al título del tema el ícono check verde.
Salu2.
Por cierto, me gustaría agregar que en mi respuesta nunca utilice una CLASE boolean.
Si tu profesor no te deja utilizar una variable booleana podrías perfectamente remplazar el boolean por un byte. utilizando el 0 como falso y el 1 como verdadero.
(Por otro lado... Tu profesor no me cae bien.) :-X
Bye! ;)