Ma méthode ne marche pas

Fermé
JavaMax Messages postés 1 Date d'inscription samedi 7 décembre 2013 Statut Membre Dernière intervention 7 décembre 2013 - 7 déc. 2013 à 21:58
DarkenNights Messages postés 134 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 17 décembre 2013 - 7 déc. 2013 à 23:11
Bonjour!

Je dois faire un programme avec deux classes. Une classe pour générer un billet de loterie et une qui s,occupe du tirage.

Je suis incapable de verifier mon billet gagnant...method verifierGagnant()

Si quelqu,un peut m,aider j'apprécirais vraiment!

Merci

import java.util.ArrayList;

/**
* "Faites une description de la classe"
*
* @author
*
* @version 2.0
*/
public class Billet
{
public final static int NUMERO_MIN = 1;
public final static int NUMERO_MAX = 49;
public final static int NB_NUMERO_PAR_BILLET = 6;

private int[] combinaison;
public ArrayList<Billet> ticket;
public Billet ()
{
init();
}

public Billet (int[] vecteur)
{
if (this.unique649(vecteur)== true)
{
combinaison = new int[6];
for (int i = 0; i < 6; i++)
combinaison[i] = vecteur[i];
}
else
{
init();
}
}

protected void init()
{
combinaison = new int[NB_NUMERO_PAR_BILLET];
int nombre;

for(int i = 0; i < combinaison.length; i++)
{
do
{
nombre = ((int)(Math.random() * NUMERO_MAX) + NUMERO_MIN);
}
while(verifierNumero(nombre));


combinaison[i] = nombre;
}

}

protected boolean verifierNumero(int numero)
{
boolean existe = false;
for (int i = 0; i < combinaison.length; i++)
{
if (combinaison[i] == numero)
existe = true;
}
return existe;
}

public String toString()
{
String chaine = "";
for (int i = 0; i < combinaison.length; i++)
{
if(combinaison[i] < 10)
{
chaine += "0";
}
chaine += combinaison[i] + " ";
}

return chaine;
}

public int getNumero(int indice)
{
int numero = 0;
if (indice >= 0 && indice < combinaison.length)
numero = combinaison[indice];
return numero;

}

protected boolean unique649(int[] vecteur)
{
boolean ok = true;

if(vecteur.length == NB_NUMERO_PAR_BILLET)
{
for(int i = 0; i < vecteur.length && ok; i++)
{
if(vecteur[i] >= NUMERO_MIN && vecteur [i] <= NUMERO_MAX)
{
for(int j = i+1 ; j < vecteur.length && ok ; j++)
{
if(vecteur[i] == vecteur[j])
{
ok = false;
}
}
}
else
{
ok = false;
}
}
}
else
{
ok = false;
}
return ok;

}


public int nbIdentiques(Billet paramBillet)
{
int nombre = 0;

for(int i = 0 ; i < paramBillet.combinaison.length; i++)
{
for(int j = 0 ; j < this.combinaison.length ; j ++)
{
if(this.combinaison[j] == paramBillet.combinaison[i] )
{
nombre++;
}
}
}
return nombre;
}


public static void main(String[] args)
{
Billet billet2 = new Billet();

for(int i = 0 ; i < NB_NUMERO_PAR_BILLET ; i++)
{
System.out.println(billet2.combinaison[i]+" ");
}


}
}


import java.util.ArrayList;

/**
* "Faites une description de la classe"
*
* @author
*
* @version 2.0
*/
public class Tirage
{
public final static double PRIX_BILLET = 1;
public final static int PERIODE = 52;
public final static double LOT3Sur6 = 10;
public final static double LOT4Sur6 = 100;
public final static double LOT5Sur6 = 10000;
public final static double LOT6Sur6 = 1000000;

public final static int NOMBRE_ANNEES_MIN = 1;
public final static int NOMBRE_ANNEES_MAX = 1000000;

private ArrayList<Billet> billets;
private ArrayList<Billet> gagnants3Sur6;
private ArrayList<Billet> gagnants4Sur6;
private ArrayList<Billet> gagnants5Sur6;
private ArrayList<Billet> gagnants6Sur6;

//public static Billet ticket;

// Chaque indice du tableau correspond à un numero du loto.
// Le tableau contient le nombre de fois que le numero (correspondant Ã
// l'indice) a été tiré.
private long[] compteurNumeros;
private ArrayList<Integer> indexTrie = new ArrayList<>(Billet.NUMERO_MAX);


public Tirage (int nbAnnee)
{
billets = new ArrayList <Billet> (PERIODE*nbAnnee);
gagnants3Sur6 = new ArrayList <Billet>(0) ;
gagnants4Sur6 = new ArrayList <Billet>(0);
gagnants5Sur6 = new ArrayList <Billet>(0);
gagnants6Sur6 = new ArrayList <Billet>(0);

for(int i = 0 ; i < nbAnnee*PERIODE ; i++)
{
billets.add(new Billet());
}

}


public boolean verifierGagnant(Billet pBillet)
{
boolean ok = false;

for(int i = 0 ; i < pBillet.ticket.size(); i++)
{
if(pBillet.ticket.get(i).nbIdentiques(this.billets.get(i)) > 2)
{
enregistrerBilletGagnant(this.billets.get(i),this.billets.get(i).nbIdentiques(pBillet.ticket.get(i)));
ok = true;
}
}
return ok;
}

private void enregistrerBilletGagnant(Billet combGagnante, int nbIdentiques)
{
switch (nbIdentiques)
{
case 3:
gagnants3Sur6.add(combGagnante);
break;
case 4:
gagnants4Sur6.add(combGagnante);
break;
case 5:
gagnants5Sur6.add(combGagnante);
break;
case 6:
gagnants6Sur6.add(combGagnante);
break;
}
}

private void incrementeNumeros(Billet billet)
{
for(int i = 0; i <= Billet.NB_NUMERO_PAR_BILLET; i++)
{
compteurNumeros[billet.getNumero(i)-1]++;
}
}

private void compteNumerosTirage()
{
for (Billet billet : billets)
{
incrementeNumeros(billet);
}

this.trieCompteurNumero();
}

private void trieCompteurNumero()
{
indexTrie.clear();
ArrayList <Long> tableauTemp = new ArrayList<>(Billet.NUMERO_MAX);

for(int i = 0; i < compteurNumeros.length; i++)
{

tableauTemp.set(i, (long)i);

}
for(int i = 0; i < tableauTemp.size(); i++)
{

if(indexTrie.get(i) < tableauTemp.get(i))
{
indexTrie.set(i, i);
tableauTemp.remove(i);

}
}

}

public long[] tireJusquaGagnant(Billet billet)
{

long [] tableauJusquaGagnant = new long[5];

do
{
this.verifierGagnant(billet);
}

while( gagnants6Sur6.size()==0 );
{

}

return tableauJusquaGagnant;
}

/*public long[] getNumerosPlusPopulaire(int nombre)
{

}

public long[] getNumerosMoinsPopulaire(int nombre)
{

}*/

public int nbGagnants3Sur6()
{
return gagnants3Sur6.size();
}

public int nbGagnants4Sur6()
{
return gagnants4Sur6.size();
}

public int nbGagnants5Sur6()
{
return gagnants5Sur6.size();
}

public int nbGagnants6Sur6()
{
return gagnants6Sur6.size();
}

public double montantGagne3Sur6()
{
return nbGagnants3Sur6() * LOT3Sur6;
}

public double montantGagne4Sur6()
{
return nbGagnants4Sur6() * LOT4Sur6;
}

public double montantGagne5Sur6()
{
return nbGagnants5Sur6() * LOT5Sur6;
}

public double montantGagne6Sur6()
{
return nbGagnants6Sur6() * LOT6Sur6;
}

public double montantDepense()
{
return PRIX_BILLET * billets.size();
}

public double montantGagneTotal()
{
return montantGagne3Sur6() + montantGagne4Sur6() + montantGagne5Sur6()
+ montantGagne6Sur6();
}

public double gainOuPerte()
{
return montantGagneTotal() - montantDepense();
}

public String toString()
{
String s = "";
for (int i = 0; i < billets.size(); i++)
{
s += billets.get(i).toString() + "\n";
}
return s;
}

/**
* Tester les méthodes
*
* @param args inutilisé
*/
public static void main(String[] args)
{
//Tirage test = new Tirage(10);
// test.verifierGagnant(ticket);



Tirage billet1 = new Tirage(1);
Billet test = new Billet();


System.out.println(test.toString());
System.out.println(billet1.toString());


System.out.println(billet1.verifierGagnant(test));
System.out.println( "Gagnant 3/6 :" + billet1.nbGagnants3Sur6());
System.out.println( "Gagnant 4/6 :" + billet1.nbGagnants4Sur6());
System.out.println( "Gagnant 5/6 :" + billet1.nbGagnants5Sur6());
System.out.println( "Gagnant 6/6 :" + billet1.nbGagnants6Sur6());
System.out.println("Montant gagné: " + billet1.gainOuPerte());
}
}

1 réponse

DarkenNights Messages postés 134 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 17 décembre 2013 10
7 déc. 2013 à 23:11
Bonjour,

Je viens de reprendre ton code et je n'ai pas forcement tout compris à cause du peu de temps que j'ai passé dessus mais aussi au peu d'info et commentaire qu'il y a.
Ensuite j'ai réussi à faire passer ta fonction, pour cela


public boolean verifierGagnant(Tirage pBillet)
{
boolean ok = false;

for(int i = 0 ; i < pBillet.billets.size(); i++)
{
if(pBillet.billets.get(i).nbIdentiques(this.billets.get(i)) > 2)
{
enregistrerBilletGagnant(this.billets.get(i),this.billets.get(i).nbIdentiques(pBillet.billets.get(i)));
ok = true;
}
}
return ok;
}

Et j'ai modifié cella la même si tu l'utilise jamais c'est juste le parametre qui n'est plus un Billet mais un Tirage.


public long[] tireJusquaGagnant(Tirage billet)
{

long [] tableauJusquaGagnant = new long[5];

do
{
this.verifierGagnant(billet);
}

while( gagnants6Sur6.size()==0 );
{

}

return tableauJusquaGagnant;
}

Et pour finir ta fonction main :


public static void main(String[] args)
{
//Tirage test = new Tirage(10);
// test.verifierGagnant(ticket);



Tirage billet1 = new Tirage(1);
Tirage test = new Tirage(1);


// System.out.println(test.toString());
// System.out.println(billet1.toString());


System.out.println(billet1.verifierGagnant(test));
System.out.println( "Gagnant 3/6 :" + billet1.nbGagnants3Sur6());
System.out.println( "Gagnant 4/6 :" + billet1.nbGagnants4Sur6());
System.out.println( "Gagnant 5/6 :" + billet1.nbGagnants5Sur6());
System.out.println( "Gagnant 6/6 :" + billet1.nbGagnants6Sur6());
System.out.println("Montant gagné: " + billet1.gainOuPerte());
}
}

Ce qui me donne une fois compiler la réponse suivante :


true
Gagnant 3/6 :2
Gagnant 4/6 :0
Gagnant 5/6 :0
Gagnant 6/6 :0
Montant gagné: -32.0

Voila je sais pas si c'est ce que tu veux mais j'ai pas regardé dans le détails non plus. Dit moi si cela t'aide sinon je chercherais plus en profondeur
2