Problème en java
Marc
-
Marc -
Marc -
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.
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:
- Problème en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
5 réponses
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
ç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à ...
@+
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à ...
@+
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++;
}
}
/**
* 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++;
}
}
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);
}
}
/**
* 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);
}
}