Problema repetición de números

Iniciado por piete2, 21 Febrero 2015, 02:08 AM

0 Miembros y 1 Visitante están viendo este tema.

piete2

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.

Código (java) [Seleccionar]

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");
   }
   
   }

engel lex

Modifiqué el mensaje, para que tu codigo sea más legible usa las etiquetas GeSHi
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

3n31ch

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?

Código (java) [Seleccionar]
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.

piete2

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.

Usuario Invitado

#4
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.

Código (java) [Seleccionar]
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);
}
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

piete2

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!!

Usuario Invitado

De nada. Si tienes un minuto, colócale al título del tema el ícono check verde.

Salu2.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

3n31ch

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!   ;)