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

Résolu/Fermé
javalex - Modifié par KX le 12/11/2014 à 19:34
 javalex - 12 nov. 2014 à 20:32
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
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 12/11/2014 à 19:43
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
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
12 nov. 2014 à 20:31
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
Oui je viens de remarquer l'erreur j'ai changé et ca marche.

Merci beaucoup pour l'aide
0