Ouais, même en mettant un caractère dans currentChar il me sort la même erreur ![]()
Le 26 novembre 2017 à 19:59:56 JamereBurvelle a écrit :
Ouais, même en mettant un caractère dans currentChar il me sort la même erreur
Bah au second tour de boucle c'est normal, en fait j'pige pas trop ce que doit faire ton programme, l'utilisateur doit deviner un mot c'est ça ?
C'est ça, word est le mot à trouver et guessedLetters la chaine de lettres entrées par l'utilisateur ![]()
Pour ton problème tu devrais déclarer CurrentChar comme un char justement et non un String, initialiser sa valeur à n'importe quelle caractère et ça devrait mieux aller !
Le 26 novembre 2017 à 19:31:19 JamereBurvelle a écrit :
J'ai un soucis![]()
J'essaie de faire le dernier exo de la semaine 4 de mon cours (un pendu), mais j'ai une ereur que je pige pas
le code : https://pastebin.com/FHy5PmGG
C'est dans la fonction hiddenWord, je dois créer le mot tel qu'il apparaîtra à l'utilisateur ("_" si la lettre est pas trouvée, sinon on l'affiche)
Mais j'ai l'erreur "Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at HangmanLogic.hiddenWord(HangmanLogic.java:47)" qui apparaîtApparemment ça voudrait dire que j'essaie d'accéder à l'index 0 et qu'il n'existe pas, sauf que j'initialise hiddenWord en copiant le mot en question dedans dès le début
![]()
J'suis perdu du coup, on pourrait m'aider ?
(le code c'est vraiment le bordel, à force de tout modifier y a plus rien de clair
)
Si tu regardes ton erreur, il te donne la ligne:
HangmanLogic.hiddenWord(HangmanLogic.java:47
à cette ligne, on a :
currentChar = currentChar.replace(currentChar.charAt(i), this.guessedLetters.charAt(i));Or, à ce moment là ton currentChar est vide, donc tu peux effectivement pas remplacer un caractère à l'index 0 vu qu'il n'y en a pas, ta chaine est de taille 0.
Si ton objectif est d'ajouter à chaque tour de boucle une lettre à ta variable currentChar, tu peux te contenter de faire un simple += ![]()
Le 26 novembre 2017 à 19:59:02 JamereBurvelle a écrit :
Le 26 novembre 2017 à 19:57:59 RepasDuCRIF a écrit :
Non en fait c'est tout con, la 1ère fois que tu lances ton programme ton "currentChar" est vide du coup c'est impossible de connaitre le caractère à 0Bah il me dit bien que l'erreur vient de hiddenWord
Je vais essayer de modifier quand même
Accessoirement, ton erreur ne vient pas de la variable hiddenWord, mais de la fonction hiddenWord(), tu devrais éviter de donner le même nom à une variable et à une fonction, ça crée une ambiguïté
Je participe. ![]()
Je ne sais pas si j'aurais la motivation pour (je suis un putain de procrastinateur) mais je vais commencer par regarder les vidéos ![]()
Le 27 novembre 2017 à 01:35:52 SixBlade a écrit :
Le 26 novembre 2017 à 19:59:02 JamereBurvelle a écrit :
Le 26 novembre 2017 à 19:57:59 RepasDuCRIF a écrit :
Non en fait c'est tout con, la 1ère fois que tu lances ton programme ton "currentChar" est vide du coup c'est impossible de connaitre le caractère à 0Bah il me dit bien que l'erreur vient de hiddenWord
Je vais essayer de modifier quand même
Accessoirement, ton erreur ne vient pas de la variable hiddenWord, mais de la fonction hiddenWord(), tu devrais éviter de donner le même nom à une variable et à une fonction, ça crée une ambiguïté
Ah putain, ok merci j'éviterai de faire ça à l'avenir ![]()
Par contre j'ai initialisé currentChar = 'a';
Et j'ai toujours l'erreur ![]()
Le 27 novembre 2017 à 01:43:27 ChakraChancla a écrit :
Je participe.Je ne sais pas si j'aurais la motivation pour (je suis un putain de procrastinateur) mais je vais commencer par regarder les vidéos
Essaie de te motiver, c'est sympa ![]()
J'ai modifié la fonction mais j'ai toujours mon erreur
public String hiddenWord() {
String printedWord = this.word;
String currentChar = "";
for(int k = 0; k < this.word.length() ; k++ ){
printedWord = printedWord.replace(printedWord.charAt(k), '_');
}
for (int i = 0; i < this.word.length() ; i++){
currentChar += this.guessedLetters.charAt(i);
if (this.word.contains(currentChar)){
for (int j = 0; j < this.word.length() ; j++){
if (this.word.charAt(j) == this.guessedLetters.charAt(i)){
printedWord = printedWord.replace(printedWord.charAt(j), this.guessedLetters.charAt(i));
}
}
}
currentChar = currentChar.substring(1);
}
return printedWord;
}
Ton problème viens de ta variable this.guessedLetters.
Elle est initialisé à "" mais je ne la vois jamais modifiée, tu aurais la fonction de test que tu utilises?
Le 27 novembre 2017 à 01:43:27 ChakraChancla a écrit :
Je participe.Je ne sais pas si j'aurais la motivation pour (je suis un putain de procrastinateur) mais je vais commencer par regarder les vidéos
Ben dis moi à quel niveau t'en es et je vais voir si je peux te passer un objectif à atteindre
Le 27 novembre 2017 à 10:31:53 SixBlade a écrit :
Ton problème viens de ta variable this.guessedLetters.
Elle est initialisé à "" mais je ne la vois jamais modifiée, tu aurais la fonction de test que tu utilises?
Voilà la fonction guessedLetters :
public void guessLetter(String letter) {
if (!this.word.contains(letter)) {
this.numberOfFaults++;
} else if (this.word.contains(letter)) {
if (!this.guessedLetters.contains(letter)) {
this.guessedLetters += letter;
}
}
}
Et la fonction de test :
public class TestProgram {
public static void main(String[] args) {
HangmanLogic l = new HangmanLogic("kissa");
System.out.println("Word at start: " + l.hiddenWord());
System.out.println("Let us guess: A, D, S, F, D");
l.guessLetter("A");
l.guessLetter("D");
l.guessLetter("S");
l.guessLetter("F");
l.guessLetter("D");
System.out.println("Guessed letterd: " + l.guessedLetters());
System.out.println("Number of faults: " + l.numberOfFaults());
System.out.println("Word is: " + l.hiddenWord());
}
}Je comprends vraiment pas d'où vient le soucis, les deux sont initialisées ![]()
Donc ton mot est "kissa"
Tu teste les lettre "adsfd"
Vu que la fonction guessLetter ne garde que les lettres appartenant au mot et qui n'ont pas déjà été testée, on a alors guessedLetters="AS"
on a donc this.guessedLetter.length()=2 et this.word.length()=4
donc à cette partie de code :
for (int i = 0; i < this.word.length() ; i++){
currentChar += this.guessedLetters.charAt(i);ton i allant de 0 à 3, tu va essayer d'accéder à this.guessedLetters.charAt(2) et this.guessedLetters.charAt(3) alors que la taille de guessedLetters vaut 2.
Voilà où se trouvait ton indexOutOfRange ![]()
Oh putain oui je suis trop con
Merci je modifie mon code ce soir ![]()
Quelqu'un connaît un bon livre pour JAVA ? Tous les livres que je lis sont assez lourds. Les chapitres sont des pavés et une fois arrivé aux exos, t'as tout oublié. 
Le 27 novembre 2017 à 17:31:18 HommeDeMode a écrit :
Quelqu'un connaît un bon livre pour JAVA ? Tous les livres que je lis sont assez lourds. Les chapitres sont des pavés et une fois arrivé aux exos, t'as tout oublié.
en parlant de livres
https://www.humblebundle.com/books/java-books
Putain j'ai ENFIN réussi ! Merci ![]()
J'suis même allé pomper une méthode pour remplacer un caractère sur le net ![]()
public String hiddenWord() {
String printedWord = this.word;
String currentChar = "";
for (int k = 0; k < this.word.length(); k++) {
printedWord = printedWord.replace(printedWord.charAt(k), '_');
}
for (int i = 0; i < this.guessedLetters.length(); i++) {
currentChar += this.guessedLetters.charAt(i);
if (this.word.contains(currentChar)) {
for (int j = 0; j < this.word.length(); j++) {
if (this.word.charAt(j) == this.guessedLetters.charAt(i)) {
printedWord = replaceCharAt(printedWord, j, this.guessedLetters.charAt(i));
}
}
}
currentChar = currentChar.substring(1);
}
return printedWord;
}
public static String replaceCharAt(String s, int pos, char c) {
return s.substring(0, pos) + c + s.substring(pos + 1);
}Et leur solution, 10 fois plus simple :
public String hiddenWord() {
String hiddenVersionOfWord = "";
int letterIndex = 0;
while (letterIndex < this.word.length()) {
char character = this.word.charAt(letterIndex);
if (this.guessedLetters.contains("" + character)) {
hiddenVersionOfWord = hiddenVersionOfWord + character;
} else {
hiddenVersionOfWord = hiddenVersionOfWord + "_";
}
letterIndex++;
}
return hiddenVersionOfWord;
}
J'ai honte ![]()
Je l'ai mis en fav je passerai dans quelques jours
JamereBurvelle
En même temps je t'avoue que j'ai vaguement essayé l'exercice, j'ai pensé à plusieurs solution, mais aucune me convenait, plus ça va moins j'aime faire des boucles ![]()