Mon programme ne marche pas [Résolu]

Messages postés
32
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
30 août 2019
-
Bonjour,

je suis en train de faire ce exercice mais j'ai rencontré des problèmes , j'ai essayé tout ce que je peux mais
je ne sais pas vraiment ce que je dois faire
ici mon travail



classe Roue

package pack8;
 
public class Roue {
 
    int aleatoire;
     
     
    public void lance()
    {
        aleatoire= 0 + (int)(Math.random() * ((4 - 0) + 1));
    }
     
    public int get()
    {
        return this.aleatoire;
    }
}


classe BanditMachot
package pack8;
 
public class BanditMachot {
static Roue [] tab;
static int gain;
 
public BanditMachot()
{
    Roue [] tab =new Roue [4];
}
 
public static int joue()
{
    //declaration variables
     
    int[] numberofoccurance=new int [4];
    int [] elements=new int[4];
     
    int forElements=0;
    boolean trouve;
    int j=0;
    gain=0;
     
    //traitement
     
    numberofoccurance[0]=1;
    elements[0]=tab[0].get();
     
     
    for (int i=1;i<4;i++)
    {
        trouve=false;
        j=0;
        while((j<i)&&(trouve==false))
        {
            if((tab[i].get()==elements[j]))
            {
                trouve=true;
                numberofoccurance[i]+=1;
            }
            else
            {
            j=j+1; 
            }
                if(trouve==false)
                {
                    forElements=forElements+1;
                    elements[forElements]=tab[i].get();
                    numberofoccurance[forElements]+=1;
                }
            }
        }
     
     
    for(int c=0;c<forElements;c++)
    {
        if(numberofoccurance[c]==2)
        {
            gain=10;
        }
        else
            if(numberofoccurance[c]==3)
                {
                gain=100;
                }
            else
                if(numberofoccurance[c]==4)
                    {
                    gain=1000;
                    }
            else
            {
                gain=0;
            }
    }
     
    return gain;
}
 
}


classe TestBanditMachot

package pack8;
 
public class TestBanditMachot {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
         
        BanditMachot bm=new BanditMachot();
        BanditMachot.joue();
    }
 
}



Configuration: Windows / Opera Next 56.0.3051.116
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
16029
Date d'inscription
samedi 31 mai 2008
Statut
Non membre
Dernière intervention
23 septembre 2019
2415
1
Merci
Bonjour,

"Mon programme ne marche pas" c'est vague... mais dans la mesure où tu as une exception, il aurait été plus pertinent de l'indiquer, c'est quand même là dessus qu'il faut partir :

Exception in thread "main" java.lang.NullPointerException
	at pack8.BanditMachot.joue(BanditMachot.java:27)
	at pack8.TestBanditMachot.main(TestBanditMachot.java:10)

Donc
BanditMachot.java:27
c'est
elements[0]=tab[0].get();
et le
NullPointerException
vient du fait que
tab
vaut
null
, cela vient de plusieurs maladresses au début de ta classe :

package pack8;
 
public class BanditMachot {
static Roue [] tab;
static int gain;
 
public BanditMachot()
{
    Roue [] tab =new Roue [4];
}
 
public static int joue()
{

Dans le constructeur tu fais
Roue [] tab =new Roue [4];
c'est à dire que tu déclares une variable locale au constructeur qui s'appelle
tab
et qui est correctement initialisée, mais qui ne sera utilisée nul part ailleurs dans le programme puisqu'elle est locale...
De toute façon le constructeur ne sert à rien, parce que la méthode
joue()
est
static
.
Donc c'est le tableau
static Roue [] tab
qui va être considéré, or celui-ci n'est pas initialisé, il vaut donc
null
, d'où le
NullPointerException
.

Remarque : même si
tab
avait été initialisé avec
new Roue [4];
comme tu as essayé de faire, c'est seulement le tableau qui aurait une valeur, mais chacune de ses cases vaudrait
null
, donc
tab[0].get();
aurait provoqué une autre
NullPointerException 
puisque
tab[0]
serait
null
aussi.

Un début pour ta classe :

package pack8;
 
public class BanditMachot {
    private final Roue[] roues;
    private int gain;
 
    public BanditMachot(int nbRoues) {
        roues = new Roue[nbRoues];
        for (int i = 0; i < nbRoues; i++) {
            roues[i] = new Roue();
        }
    }
 
    public int joue() {

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60028 internautes nous ont dit merci ce mois-ci

Commenter la réponse de KX
Messages postés
32
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
30 août 2019
0
Merci
Merci beaucoup Monsieur

mais je pense que je dois metttre ceci
public BanditMachot(int nbRoues) {
roues = new Roue[nbRoues];
for (int i = 0; i < nbRoues; i++) {
roues[i] = new Roue().lance().get();

}
}
est ce que correct?? pourque chacque roue initialise avec le nombre aleatoire de la classe Roue membre aleatoire?
KX
Messages postés
16029
Date d'inscription
samedi 31 mai 2008
Statut
Non membre
Dernière intervention
23 septembre 2019
2415 -
Tu ne peux pas faire
roues[i] = new Roue().lance().get();
il faut respecter les types de données.
De plus l'exercice t'impose d'avoir un tableau de 4 roues, il ne faut donc pas lancer 4 fois la même roue.
LearnDeep
Messages postés
32
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
30 août 2019
-
comment initialiser les 4 roues chacune d'autre de la variable membre aléatoire?
Merci ))

chaque roue doit être initialise par un nombre aléatoire , je ne sais pas comment le faire ...
Commenter la réponse de LearnDeep