IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

tableau de booleans


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut tableau de booleans
    Salut à tous!
    En fait je travaille sur un petit jeu qui est tel que j'ai un tableau A={4,5,6}.Je dois toucher toutes les valeurs du tableau A.Par exemple quand je propose 6, j'ai comme reponse "touché".Quand je propose 2 qui n'est pas dans le tableau, il me repond "manqué".Mais le problème qui se pose est que quand je propose 6 une seconde fois il me dit encore "touché".En fait une valeur ne peut être touchée qu'une fois.
    J'ai eu une première idée de remplacer par -1 une valeur touchée.Dans ce sens ça marche.
    Mais j'ai du mal avec une deuxième idée qui consiste à utiliser un deuxième tableau B de booleans qui me signale qu'une valeur a été déjà touchée quand je propose cette valeur pour une seconde fois.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    Juste une précision, j'aimerais le faire sans utiliser ArrayList

  3. #3
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    salut,

    tu n'as qu'à créer un tableau de boolean de même taille que ton tableau A, et tu l'initialises à false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boolean touches = new boolean[A.length];
    et puis dans la boucle où tu "touches" une valeur du tableau, tu testes d'abord si la case correspondantes (qui a le même index) dans le tableau de boolean est true ou false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    int x = 6;
    int[] A = {4, 5, 6};
    boolean touches = new boolean[A.length];
    for (int i = 0; i < A.length; i++)
    {
        if (A[i] == x)
        {
            //On teste si cette valeur a déjà été touché
            if (!touches[i])     //si elle n'a pas été touché
            {
                System.out.println("Touché");
                //et puis on précise que cette case a été touché dans le tableau de boolean
                touches[i] = true;
            }
        }
    }

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    Ok merci ça me parait clair! je vais essayer de le tester!! à tout à l'heure

  5. #5
    Membre actif Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Points : 251
    Points
    251
    Par défaut
    Sinon au lieu d'utiliser deux tableaux tu peux faire avec un HashTable<Integer,Boolean>

  6. #6
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    ce serait plutôt Hashtable<Integer, Boolean>

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    salut! voici mon code.Mais le probleme est que quand je donne 6, le programme me dit touché, quand je donne à nouveau 6, il me dit encore touché alors que je veux qu'il le dise une seule fois.En fait le true n'est pas conservé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    :
    class PointCom{
    int [] cellules;
    int nbreTouches=0;
     
    public void setCellules(int[] places){
    cellules=places;
    }
    public String autoVerif(String stringPropo){
    boolean cellulesT=new boolean[cellules.lentgh];
    int propo=Integer.parseInt(stringPropo);
    String resultat="manqué";
    for(int i=0; i<cellules.length,i++){
    if((propo==cellules[i])&&(cellulesT[i]==false)){
    resultat="touché";
    cellulesT[i]=true;
    nbreTouches++;
    break;}
    else{resultat="manqué";
    }
     
    if(nbreTouches==cellules.length){
    resultat="coulé";
    }
    System.out.println(resultat);
     
    return resultat;
    }
    }

  8. #8
    Membre actif Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Points : 251
    Points
    251
    Par défaut
    Déjà pas besoin du bloc else puis que résultat est initialisé à "manqué"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    else{resultat="manqué";
    }
    Ce test n'a pas de sens puisque le tableau par defaut est initialisé à false :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if((propo==cellules[i])&&(cellulesT[i]==true)){
        resultat="touché";
        cellulesT[i]=true;
        nbreTouches++;
        break;
    }
    donc c est plutôt ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((propo==cellules[i])&&(!cellulesT[i]))
    ou bien pour plus de lisibilité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((propo==cellules[i])&&(cellulesT[i]==false))

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    C'est vrai j'ai fait une erreur quand j'ai tapé le code en fait sur mon ordi c'est cellulesT[i]==false
    merci

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    ca ne marche pas malheureusement

  11. #11
    Membre actif Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Points : 251
    Points
    251
    Par défaut
    Avec le code que j'ai devant les yeux il ne peut pas te renvoyer touché deux fois pour une même valeur sauf si :
    - Tu as la valeur 2 fois dans le tableau et il me semble que c'est normal et correct qu'il te renvoi touché 2 fois.
    - Tu utilises à chaque fois une nouvelle instance de PointCom pour verifier.

    Donc est ce que je peux voir le code qui instancie PointCom et appelle sa méthode pour vérifier la présence d'une valeur .
    J'ai l'impression que ta classe est clean c'est l'appel qui fait défaut.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    En fait quand j'ajoute dans le code ci-dessus pour voir quelles sont differentes valeurs du tableau cellulesT

    for(int i=0; i<cellules.lentgh; i++){
    System.out.println(cellulesT[i]);
    }

    et quand j'essaie de tester le tableau places={4,5,6}

    quand je propose 6, il m'affiche:

    touché
    false
    false
    true
    et quand je tape 5, il m'affiche:

    touché
    false
    true
    false (ici je crois que ce serait true par rapport à la proposition precedente)

    c'est comme si le tableau est revenu à false
    false
    false

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    voici le code test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    :
    import java.io.*;
    class TestPointCom{
    public static void main(String[] args)throws IOException{
    PointCom pc=new PointCom();
    int [] places={4,5,6};
    pc.setCellules(int[] places);
    for(i=0; i<cellules.length, i++){
    InputStreamReader isr = new InputStreamReader(System.in);
          BufferedReader br = new BufferedReader(isr);
     
            String stringpropo = br.readLine();
     
     pc.autoVerif(stringpropo);
    }
    }
    }

  14. #14
    Membre actif Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Points : 251
    Points
    251
    Par défaut
    Op Op Op Autant pour moi. C'est normal tout ça et merci pour ton debogage.
    En fait le problème provient du fait que c'est la méthode de vérification de la présence du nombre qui instancie le tableau suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boolean cellulesT=new boolean[cellules.lentgh];
    Donc pour chaque nombre on a un nouveau tableau avec tout element à false.
    Alors tu declares le tableau de boolean comme attribut de la classe et met l'instanciation du tableau dans le constructeur ou dans setCellule.Le code qui en resulte est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    class PointCom{
       int [] cellules;
       boolean[] cellulesT;
       int nbreTouches=0;
     
    public void setCellules(int[] places){
       cellules=places;
       cellulesT=new boolean[cellules.lentgh];
    }
    public String autoVerif(String stringPropo){
         int propo=Integer.parseInt(stringPropo);
         String resultat="manqué";
         for(int i=0; i<cellules.length,i++){
         if((propo==cellules[i])&&(cellulesT[i]==false)){
           resultat="touché";
           cellulesT[i]=true;
           nbreTouches++;
            break;
          }
        }
    if(nbreTouches==cellules.length){
      resultat="coulé";
    }
    System.out.println(resultat);
     
    return resultat;
    }
    }

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    Ok merci tu as bien compris le sujet; ça marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Traitement des tableau de boolean
    Par Invité dans le forum Ada
    Réponses: 4
    Dernier message: 13/11/2012, 01h29
  2. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  3. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21
  4. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo