Java et vecteur

Discussion dans 'Etudes' créé par freedumz, 5 Janvier 2013.

  1. Offline
    freedumz Chasseur de castors
    Salut à tous,
    Je suis en train de concevoir un pendu en java, je commence a voir le bout, sauf que je voudrais juste pouvoir comparer une lettre entrée au clavier avec les lettres deja entre precedement donc voici ma ligne:

    for (i=1;i<tampon.length-1;i++){
    if (tampon==a){
    memo=true;
    }
    else {
    memo=false;
    }
    }

    Le soucis est que ma memoire est toujours a true, je ne vois vraiment pas pourquoi, si quelqu'un a une petite idée
    freedumz, 5 Janvier 2013
    #1
  2. Offline
    horny Elite
    uhm ne devrais-tu pas commencer par parcourir ton vecteur en 0 ?
    horny, 5 Janvier 2013
    #2
  3. Offline
    freedumz Chasseur de castors
    Oui pardon, je le commence en 0 en effet, faute de frappe
    mais le soucis c'est que je viens de mettre un system.out dans les deux if et rien ne sort donc j'ai l'impression que ma boucle ne passe pas par la :/
    freedumz, 5 Janvier 2013
    #3
  4. Offline
    Kuzco El Lama Bazinga!
    trust me

    i'm an engineer
    Kuzco El Lama, 5 Janvier 2013
    #4
  5. Offline
    Skarbone I would rather be snowboarding
    Je suppose que la variable "a" contient le caractère entré au clavier. déja c'est un très mauvais nom de variable :D.

    Ensuite, tu parles de vecteur, mais a priori tu utilises un tableau? Y'a un classe Vector en java, ca te facilitera peut être la tâche? (bien qu'un tableau est tout aussi utilisable..)

    Sinon juste avec ce bout de code on peut difficilement te dire ce qui va pas, on sait pas ce que contient ton tableau ni rien.. A priori je vois pas d'erreur dedans. Sinon jpense que plutot qu'un if/else, tu pourrais faire:

    memo = (tampon==a);

    ou encore

    memo = (tampon==a) ? true : false;

    si tu veux te familiariser avec les if ternaire


    edit: et si tu n'as aucun résultat avec un SOUT, c'est... Que ton tableau est vide.
    Skarbone, 5 Janvier 2013
    #5
  6. Offline
    freedumz Chasseur de castors
    private void jeu(){
    String s, t;
    char a;
    s = field.getText();
    a = s.charAt(0);

    for (i=0;i<20;i++){
    if (tampon==a){
    memo=false;

    }
    else {

    memo=true;

    }
    }

    if (memo=false) {
    JOptionPane.showMessageDialog(this, "Attention!!! cette lettre à déja été utilisée", "Erreur", 1);
    return;
    }

    if (memo=true{
    if (motgen.indexOf(s) == -1){//cas où la lettre n'est pas dans le mot
    erreurs++;
    tampon[k]=a;
    k++;
    Image();
    if (erreurs==gameover){ //Si le nombre d'erreur vaut le nombre de fautes autorisés, la partie est terminée
    JOptionPane.showMessageDialog(this, "Perdu", "note", 1);

    }
    return;
    }
    for (int i=0; i<motgen.length(); i++){
    if (motgen.charAt(i) == a){
    gword.setCharAt(i, a);
    labelmot.setText(String.valueOf(gword));
    System.out.println(gword);
    }
    }
    tampon[k]=a;
    System.out.println(tampon);
    k++;
    t = new String(gword);

    if (t.indexOf('.') == -1){ // si tout les . ont été remplacé, la partie est gagné
    message="You win!";
    return;
    }
    }
    }

    Ca ne fonctionne pas :/ mais deja merci pour votre aide, je vous montre ma fonction complete, je ne vois vraiment pas d'où vient mon soucis, la premiere fois, le pendu doit forcement passer par le false comme mon tampon est encore vide
    et pour le vecteur un tableau a une dimension, n'est pas un vecteur? (car si je me souviens de mes cours de C c'etait le cas non? )
    freedumz, 5 Janvier 2013
    #6
  7. Offline
    freedumz Chasseur de castors
    Okay j'ai trouvé,
    Il me suffissait de mettre un break; quand la condition etait verifié :)
    freedumz, 5 Janvier 2013
    #7
  8. Offline
    Skarbone I would rather be snowboarding
    wait, what? oO
    Skarbone, 5 Janvier 2013
    #8
  9. Offline
    freedumz Chasseur de castors
    for (i=0;i<20;i++){
    if (tampon==a){
    memo=false;

    }
    else {

    memo=true;

    }
    }

    dans tampon, je stockais mes lettres au fur et a mesure donc après une lettre il me restait 19 espaces vides donc imaginons
    j'entre un e, il me l'accepte
    J'entre une deuxieme fois un e, il me le refuse et passe a true mais ensuite il compare 19 fois le e a rien donc il passe a false
    freedumz, 5 Janvier 2013
    #9
  10. Offline
    ailless Asimov, Sagan, Carlin, Hitchens
  11. Offline
    freedumz Chasseur de castors
    j'ai de nouveau un soucis, je reviens donc vers vous
    Pour mon pendu, j'ai trouvé un dictionnaire sur un fichier texte, je voudrais pouvoir extraire une valeur au hasard mais j'obtiens tjs la meme :/ (le premier mot de mon .txt revient a chaque fois)

    public void motinconnu()
    {
    ligne = (int)(Math.random()*336530);//génere correctement le nombre
    System.out.println(ligne);
    try {
    file = new File("data.txt");
    reader = new LineNumberReader(new FileReader(file));
    reader.setLineNumber(ligne);
    System.out.println(reader.getLineNumber());
    MotCache = reader.readLine();
    System.out.println(MotCache);
    } catch (IOException ex) {}

    }
    freedumz, 5 Janvier 2013
    #11
  12. Offline
    Skarbone I would rather be snowboarding
    pourquoi * 336530 ?

    Sinon math.random ca t'envoie un double entre 0 et 1, donc comme tu caste en int ca va toujours te faire 336530.

    Fais plutot

    ligne = new Random().nextInt(100);

    ou 100 doit etre remplacé par le nombre de ligne de ton fichier.
    Skarbone, 6 Janvier 2013
    #12
  13. Offline
    titoum GMZ Crew optc 970.342.646
    un random DOIT toujours etre base sur un time sinon c'est pas du random.
    dans le genre new Random(System.nanoTime());
    titoum, 6 Janvier 2013
    #13
  14. Offline
    freedumz Chasseur de castors
    Le 336530 vient du fait que j'ai 336530 mot dans ma base de donné et je le transforme en int car il me faut une valeur entiere ou peut etre un peu plus simple, ranger mon fichier texte dans un tableau et la prendre une valeur aleatoire de mon tableau non?
    Sauf que mon fichier est separé ligne par ligne, quelqu'un aurait une idée de comment puis je faire ca?
    freedumz, 6 Janvier 2013
    #14
  15. Offline
    horny Elite
    lol .. y a pas plus simple ? genre utiliser une fonction génératrice de nombres entier dans un certain range ?
    horny, 6 Janvier 2013
    #15
  16. Offline
    Skarbone I would rather be snowboarding
    ligne = new Random().nextInt(336530);

    comme je l'ai dit plus tot.

    Ca sert a rien ce que tu fais, le constructeur par défaut de Random prend déja le temps systeme comme seed:

    http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#Random()

    (et j'ajouterai que même si c'est basé sur le temps, ca n'a rien de random, ils le disent d'ailleurs: deux random basés sur le même seed auront toujours la même séquence d'apparition des nombres. On ne peut pas faire de l'aléatoire, c'est toujours pseudo aléatoire.)
    Skarbone, 6 Janvier 2013
    #16
  17. Offline
    freedumz Chasseur de castors
    Merci pour votre aide, je viens de trouver un truc qui fonctionne relativement bien a l'instant:
    File wordFile = new File("G:\\\\hangman\\Dico.txt");
    ArrayList<String> words = new ArrayList<String>();
    try
    {
    BufferedReader reader = new BufferedReader(new FileReader(wordFile));
    String word = null;
    while (( word = reader.readLine()) != null)
    words.add(word);
    }
    catch(IOException e)
    {
    System.out.println(e);
    }

    Random rand = new Random();
    int i = rand.nextInt(words.size());
    motgen = words.get(i);
    System.out.println(motgen);

    gword = new StringBuffer();
    field.setText("");

    J'ai surtout un gain de temps car il ne doit pas s'amuser a tout lire

    Mainteant, j'ai encore un dernier soucis:p, je bloque pour jouer des sons tout simple pourtant le code fonctionnait dans mes anciens programmes, juste en 3 lignes car c'est uniquement pour faire un son lors de la mort du pendu et un lorsqu'il est sauvé donc voic mon code:

    URL url_1 = test.class.getResource( "G:\\\\hangman\\fatality.wav" );
    AudioClip ac1 = Applet.newAudioClip(url_1);
    ac1.play();



    je sais je suis une chevre en java , alors que tout les autres logiques de programmation ne presentent aucune reelle difficulté
    freedumz, 6 Janvier 2013
    #17
  18. Offline
    Skarbone I would rather be snowboarding
    Charger tout le fichier dans une arraylist, tu crois que c'est pas tout lire?

    C'est dommage de charger 300.000 mots dans une arraylist pour n'en sortir qu'un par partie non?
    Tu ferais bien aussi de mettre un chemin relatif pour ton fichier dico. Si tu dois remettre ton projet a quelqu'un, ca ne marchera pas comme ca.

    Enfin, tu prend un random entre 0 et la taille de ta liste. Si ton random te renvoie le dernier numéro, tu va faire (en gros) words.get(words.size()), ce qui va planter car l'indice commence a 0. Bon ok ca se passera théoriquement une fois sur 350.000 mais quand même.
    Skarbone, 6 Janvier 2013
    #18
  19. Offline
    freedumz Chasseur de castors
    le chemin relatif, tu entends quoi?
    si je le place dans la racine de mon projet, je fais .\\dico.txt?
    C'est bien ca? si oui ca ne fonctionne pas :/
    freedumz, 6 Janvier 2013
    #19
  20. Offline
    Skarbone I would rather be snowboarding
    c'est que tu le fais mal :D
    Skarbone, 6 Janvier 2013
    #20