CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[PROJET] Apprenons à programmer en JAVA !

JamereBurvelle
JamereBurvelle
Niveau 40
26 novembre 2017 à 19:59:56

Ouais, même en mettant un caractère dans currentChar il me sort la même erreur :(

RepasDuCRIF
RepasDuCRIF
Niveau 10
26 novembre 2017 à 20:07:36

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 ?

Message édité le 26 novembre 2017 à 20:07:48 par RepasDuCRIF
JamereBurvelle
JamereBurvelle
Niveau 40
26 novembre 2017 à 22:20:50

C'est ça, word est le mot à trouver et guessedLetters la chaine de lettres entrées par l'utilisateur :(

Wardof
Wardof
Niveau 3
26 novembre 2017 à 23:40:15

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 !

SixBlade
SixBlade
Niveau 10
27 novembre 2017 à 01:32:00

Le 26 novembre 2017 à 19:31:19 JamereBurvelle a écrit :
J'ai un soucis https://image.noelshack.com/fichiers/2016/36/1473263957-risitas33.png

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ît :-(

Apparemment ç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 https://image.noelshack.com/fichiers/2017/21/1495823687-risitas197.png

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 :rire: )

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 += :ok:

SixBlade
SixBlade
Niveau 10
27 novembre 2017 à 01:35:52

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 à 0

Bah 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é [[sticker:p/1jnf]]

ChakraChancla
ChakraChancla
Niveau 10
27 novembre 2017 à 01:43:27

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 :hap:

Message édité le 27 novembre 2017 à 01:43:48 par ChakraChancla
JamereBurvelle
JamereBurvelle
Niveau 40
27 novembre 2017 à 09:25:01

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 à 0

Bah 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é [[sticker:p/1jnf]]

Ah putain, ok merci j'éviterai de faire ça à l'avenir :(

Par contre j'ai initialisé currentChar = 'a';

Et j'ai toujours l'erreur :-(

JamereBurvelle
JamereBurvelle
Niveau 40
27 novembre 2017 à 09:25:19

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 :hap:

Essaie de te motiver, c'est sympa :oui:

JamereBurvelle
JamereBurvelle
Niveau 40
27 novembre 2017 à 09:53:19

J'ai modifié la fonction mais j'ai toujours mon erreur [[sticker:p/1lmc]]

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;
    }
SixBlade
SixBlade
Niveau 10
27 novembre 2017 à 10:31:53

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?

SixBlade
SixBlade
Niveau 10
27 novembre 2017 à 10:37:38

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 :hap:

Ben dis moi à quel niveau t'en es et je vais voir si je peux te passer un objectif à atteindre [[sticker:p/1jnf]]

JamereBurvelle
JamereBurvelle
Niveau 40
27 novembre 2017 à 12:39:44

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 :-(

SixBlade
SixBlade
Niveau 10
27 novembre 2017 à 14:05:24

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 :ok:

JamereBurvelle
JamereBurvelle
Niveau 40
27 novembre 2017 à 17:11:31

Oh putain oui je suis trop con [[sticker:p/1lmc]]

Merci je modifie mon code ce soir :rire:

HommeDeMode
HommeDeMode
Niveau 10
27 novembre 2017 à 17:31:18

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é. https://image.noelshack.com/fichiers/2017/02/1483996277-154457.jpg

zer____________
zer____________
Niveau 8
27 novembre 2017 à 23:04:10

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é. https://image.noelshack.com/fichiers/2017/02/1483996277-154457.jpg

en parlant de livres

https://www.humblebundle.com/books/java-books

JamereBurvelle
JamereBurvelle
Niveau 40
27 novembre 2017 à 23:27:13

Putain j'ai ENFIN réussi ! Merci :rire:

J'suis même allé pomper une méthode pour remplacer un caractère sur le net :rire:

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 :hap:

Fourechane
Fourechane
Niveau 8
27 novembre 2017 à 23:30:08

Je l'ai mis en fav je passerai dans quelques jours [[sticker:p/1kki]]

SixBlade
SixBlade
Niveau 10
28 novembre 2017 à 00:47:39

JamereBurvelle :d) 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 :ok:

Sous forums
  • Religion
La vidéo du moment