Problème en java

Fermé
Marc - 9 août 2004 à 21:37
 Marc - 10 août 2004 à 12:35
Bonsoir.
J'ai réalisé le programme suivant,pour simuler une partie de dés et compter le nombre de coups nécessaires pour atteindre le score de 21:

//programme simulant le jeu consistant à lancer
//des dés jusqu'à obtenir 21 points

public class jeu21 {

public static void main(String args[]) {
Double D;
int tirage;
score2 pierre=new score2("Pierre");
while (pierre.getScore()<21) {
D=new Double(6*Math.random()+1);
tirage=D.intValue();
pierre.ajoute(tirage);
pierre.affiche();
}
System.out.println("Pierre a gagné en "+pierre.getNbEssais()+" coups.");
}
}

En utilisant une classe score2(dérivée d'une classe score1) caractérisée par un nom de joueur,son nombre d'essais,un score qui évolue et un score maximum.

A la compilation,j'ai le message d'erreur:
java.lang.ArrayIndexOutOfBoundsException(pourtant je n'utilise pas de tableau)
suivi d'une dizaine de lignes du genre:
at at.dms.kjc.CClass.collectApplicableMethods(CClass.java:1087)

Quelqu'un saurait-il m'expliquer ou est le problème et ce que signifient les lignes d'erreur?
Merci d'avance.
A voir également:

5 réponses

silfaxu Messages postés 102 Date d'inscription jeudi 18 décembre 2003 Statut Contributeur Dernière intervention 6 février 2008 11
10 août 2004 à 08:32
Salut,

Peux-tu mettre aussi le code de la classe Score2 ? Initialises-tu bien le score dans cette classe ? parce qu'à première vue, quand tu fais
while ( pierre.getScore() < 21) 

ça suppose que pierre.getScore() renvoie quelque chose de cohérent ( 0 par exemple ) la première fois que cette méthode est appelée.
L'erreur peut venir de là ...

@+
0
Voilà le code de la classe score2(dérivée de la classe score) et apparemment le score est bien initialisé à 0 par le constructeur puis retourné à chaque appel de la méthode getScore...

/**
* Classe dérivée de score
* Elle prend en compte le nombre d'essais nécessaires
* pour atteidre le score.
*/
public class score2 extends score {
private int nbEssais;

/**
* Constructeur par défaut
*/
public score2() {
super();
nbEssais=0;
}

/**
* Constructeur avec initilaisation du nom
*/
public score2(String nom) {
super(nom);
nbEssais=0;
}

/**
* lecture du nombre d'essais
*/
public int getNbEssais() {
return nbEssais;
}

/**
* inscription d'un score
* surcharge de la méthode setScore héritée
*/
public void setScore(int sco) {
super.setScore(sco);
nbEssais++;
}

}
0
silfaxu Messages postés 102 Date d'inscription jeudi 18 décembre 2003 Statut Contributeur Dernière intervention 6 février 2008 11
10 août 2004 à 11:32
Ton erreur est bien à la compilation ? non à l'exécution ?
0
silfaxu Messages postés 102 Date d'inscription jeudi 18 décembre 2003 Statut Contributeur Dernière intervention 6 février 2008 11
10 août 2004 à 11:38
Tu n'as pas donné le code de
getScore()
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Oui l'erreur est bien à la compilation.Pour getScore, en fait son code est donné dans la classe score(classe parent de score2).Elle ne fait que retourner l'attribut "leScore". Voilà le code de la classe score si ça peut t'aider:

/**
* Cette classe permet la gestion du score d'un joueur.
*/
public class score {

/**
* Nom du joueur.
*/
public String nom;

/**
* Score maximal
*/
int scoMax;

private int leScore;

/**
* Constructeur par défaut :
* nom:"inconnu" ,
* score initial:0 ,
* score maximal:100 .
*/
public score() {
nom="inconnu";
leScore=0;
scoMax=100;
}

/**
* Constructeur avec initialisation du nom.
*/
public score(String nom) {
this.nom=nom;
leScore=0;
scoMax=100;
}

/**
* méthode de lecture du score
*/
public int getScore(){
return leScore;
}

/**
* méthode d'écriture du score
*/
public void setScore(int sco) {
if (sco>scoMax) leScore=scoMax;
else if (sco<0) leScore=0;
else leScore=sco;
}

/**
* méthode pour ajouter des points au score.
*/
public void ajoute(int points) {
setScore(leScore+points);
}

/**
* méthode d'affichage du score
*/
public void affiche() {
System.out.println(nom+" : "+leScore);
}

}
0