Besoin d'aide urgente pour un programme finis avec une erreur

Résolu
javalex -  
 javalex -
Bonjour,
j'aurais besoin de votre aide pour un petit probleme...
Je dois rendre ce programme pour demain, il s'agit d'un pendu.
Voila le programme:

void main(){ 
//Preambule 
 println("Bienvenue au jeu du pendu, le premier joueur doit choisir un mot" ); 
 println("!ATTENTION! Pour jouer il faut utiliser uniquement des lettres minuscules" ); 
 
//Joueur 1 
 String mot = readString("Entrez le mot:" ); 
 int nblettre = readInteger("Combien de lettres comportent votre mot ?" ); 
  
 int tableau[] = new int[nblettre+1]; 
  for (int i=1; i<tableau.length;i++){ 
   tableau[i]= readChar ("Entrez la lettre " + i + ":" ); 
 } 
 
//Joueur 2 
 println("C'est au deuxieme joueur de deviner le mot. Bonne chance !" ); 
 boolean[] boo = new boolean[nblettre];  
 int co=0;  
 int vie=11;  
 while(vie > 0 ){  
  co=0;  
  String motecran = "Mot: ";  
   for(;nblettre!= co;){  
    if (boo[co]){  
     motecran = motecran +mot.charAt(co)+" ";  
} 
    else{   
     motecran = motecran +"_ ";  
}  
   co++;  
 
}  
  println(motecran);  
  char lettre = readCharacter ("Entrez votre lettre :" );  
  String rep = ("Vous avez tapé " +lettre);  
  println (rep);  
  co=0;  
  int ci=nblettre;  
  while (ci != nblettre){  
   if (lettre == mot.charAt(co)) {  
    boo[ci]=true;  
}  
   else{ci=ci-1;  
}  
   ci++;  
}  
  if (ci==0){vie=vie-1;}  
  if (vie >1 ){ 
   println ("Il vous reste "+vie+" vies" );  
}  
  else{  
   println("Il vous reste "+vie+" vie" );   
}  
  boolean v= true;  
  co=0;  
  while(co!=nblettre){  
   if (boo[ci]==false){  
    v = false;  
}  
   ci++;  
}  
  if (v){ vie=-1;}  
}  
 
//Resultat 
 if (vie == 0){  
  println ("MINCE ! Vous avez été pendu" );  
  println ("Il fallait trouver : "+mot);}  
 if (vie == -1){  
  println ("BIEN JOUE ! C'est gagné" );  
  println (mot + (" était bien la solution" )); 
  }  
} 

Quand je rentre un nombre de lettre X, le programme se déroule de la facon suivante:
Je peux rentrer mon mot, le nombre de lettre X et les lettres dans l'ordre.
Puis viens le tour du joueur 2, je rentre une lettre appuie sur entré et voila;

Compilation réussie !
Bienvenue au jeu du pendu, le premier joueur doit choisir un mot
!ATTENTION! Pour jouer il faut utiliser uniquement des lettres minuscules
C'est au deuxieme joueur de deviner le mot. Bonne chance !
Mot: _ _ _ _ _ _ _
Vous avez tapé a
Il vous reste 11 vies

-------------------
Erreur lors de l'exécution de la proglet
java.lang.ArrayIndexOutOfBoundsException: X ( le nombre de lettre )
.main(JvsToJavaTranslated22.java:57)
.run(JvsToJavaTranslated22.java:1)

-------------------

Il faut savoir que le programme marchait hier. Je n'ai apporté que de petites modifs,.. je n'en connais pas la cause.

Merci d'avance pour votre aide

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

java.lang.ArrayIndexOutOfBoundsException: X ( le nombre de lettre ) 
.main(JvsToJavaTranslated22.java:57)

Regardons donc ligne 57, on a un accès tableau
boo[ci]
or que vaut
ci
? La dernière fois qu'il a été utilisé c'était ligne 39 et on avait
ci==nblettre
(sinon on ne serait pas sorti de la boucle while), or
boo
a
nblettre
cases numérotés de 0 à nblettre-1, donc nblettre est en dehors des limites autorisés (out of bounds en anglais) d'où l'erreur...

Je pense que tu voulais dire
if (boo[co]==false)
et
co++;
ligne 60.
La confiance n'exclut pas le contrôle
1
javalex
 
Ok donc en fait j'ai encore un probleme... Le programme fonctionne dans le principe mais en fait non..
Quand je veux faire deviner par exemple le mot "aha" voila ce que j'ai:

Compilation réussie !
Bienvenue au jeu du pendu, le premier joueur doit choisir un mot
!ATTENTION! Pour jouer il faut utiliser uniquement des lettres minuscules
C'est au deuxieme joueur de deviner le mot. Bonne chance !
Mot: _ _ _
Vous avez tapé a
Il vous reste 11 vies
Mot: _ _ _
Vous avez tapé z
Il vous reste 11 vies
Mot: _ _ _
Vous avez tapé e
Il vous reste 11 vies


-------------------
Erreur lors de l'exécution de la proglet
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
.main(JvsToJavaTranslated10.java:34)
.run(JvsToJavaTranslated10.java:1)

-------------------

Alors que j'ai bien demander un "a"
le code erreur a la fin est du au fait que j'ai arreter le programme.
comment faire svp ?...
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu as un autre problème lignes 38 et 39 :

int ci=nblettre;  
while (ci != nblettre){

Tu ne rentres jamais dans la boucle, donc tu arrives ligne 47 :

if (ci==0){vie=vie-1;}  

Là encore tu ne respectes pas la confition donc tu ne rentres pas dans le if, et tu boucles.
0
javalex
 
Oui je viens de remarquer l'erreur j'ai changé et ca marche.

Merci beaucoup pour l'aide
0