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 :

Jeux de question/réponses (API Stream)


Sujet :

Collection et Stream Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Jeux de question/réponses (API Stream)
    Bonjour,

    Je suis étudiant et actuellement je travail sur un petit projet de Java. C'est un jeu de quizz avec question/ réponse. Il y a une classe Joueur qui possède notamment comme attribut un score et un timer. A chaque question un timer se déclenche et s'arrête une fois la réponse fournit.

    L'idée étant qu'une fois la manche terminée, si il y a eu bonne réponse, le score du joueur est incrémenté de 2 et que parmi 4 joueurs, seuls 3 sont qualifiés au tour suivant. Mon problème c'est que je dois départager ces joueurs qui stockés dans une ArrayList. Je dois les départager selon plusieurs critères : En cas d'égalité des scores, alors les timer les départages (les plus rapides sont sélectionnés) ; si il y a égalité des scores et des timers, je dois proposer de nouveau 3 questions pour les départager et si il y a encore égalité après ça, alors sélection aléatoire.

    Je n'arrive pas à représenter ces cas de figures, mais je pense que je suis sur la bonne voie en me disant qu'il faut que j'utilise l'API stream pour résoudre mon problème.

    J'ai déjà réussis à classer les joueurs selon le score, puis le timer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    joueurs //Ma liste de joueurs
        .stream()
        .sorted(Comparator.comparingInt(Joueur::getScore).reversed().thenComparing(Joueur::getTimer)); //On trie les joueurs selon le score puis le timer

    C'est un début mais je ne sais pas comment comparer ces joueurs selon les cas de figures que je vous ai présenté ci-dessus.

    Mon but au final est que la liste joueurs qui comptait 4 joueurs à la base deviennent une liste de 3 joueurs, les qualifiés pour le tour suivant.

    J'espère que j'ai été claire, n'hésitez pas a me demander de clarifier un point si nécessaire.

    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Hello,

    je ne pense pas que l'API stream soit utile dans ce cas de figure.

    Si tu veux trier les joueurs, tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    joueurs.sort(tonComparateur);
    L'intérêt des streams n'est pas là.

    Je dirais que pour ton jeu, ton besoin est assez spécifique et tu ne peux pas trop t'attendre à ce que le langage ait quelque chose qui gère les cas pour toi.

    A priori ton besoin, c'est d'éliminer un joueur à la fin d'une manche. Première étape trier les joueurs par résultats, ça, ok.
    Par contre, la question de s'il y a égalité, ça c'est vraiment ton truc à toi, c'est pas une situation normale. Dans une situation normale, quand "on garde les 3 plus grands", on se fiche que le 4e soit tout aussi grand. On prend les 3 qu'on a et puis c'est tout. Les statistiques n'ont pas droit à autant d'égards que les gens, principalement parce que ça ne servirait à rien.

    Je dirais qu'après le tri, et que tu as identifié le 4e joueur comme "probablement celui à éliminer", tu vas vouloir vérifier si par hasard il n'est pas à égalité avec le joueur juste devant lui.

    Si non, alors tu as trouvé le joueur à éliminer.

    Si oui, alors tu n'est pas dans une situation où tu as un "joueur classé dernier" et tu vas devoir appliquer une de tes étapes de résolution.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Tout d'abord merci pour t'as réponse.

    J'ai déjà envisagé ce que tu proposes et je suis assez d'accord, le seul problème c'est par exemple, imaginons que les 4 joueurs soient égaux en score et timer ou alors les 3 derniers égaux encore une fois. Existe-t-il une interface qui permettent de comparer chaque entité d'une liste avec toutes les autres ?

    Je te met aussi l’exécution de mon code sur ma console, pour que tu puisses y voir un peut plus claire dans le déroulement de la partie.
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    ** Génération des joueurs **
    4 joueurs sont choisis aléatoirement....
    Le thème selectionné est le n°1 (Géographie)
    C'est au tour du joueur E de jouer
     
    * Niveau : Facile
    3) Marrakech est la capitale du Maroc
     
    Vrai ou faux ? :
    vrai
    Mauvaise réponse
     
    Le thème selectionné est le n°2 (Politique)
    C'est au tour du joueur L de jouer
     
    * Niveau : Facile
    6) A quel âge peut-on voter à l’élection présidentielle ?
     
    Veuillez entrer votre réponse :
    18 ans
    Bonne réponse !
     
    Le thème selectionné est le n°3 (Sport)
    C'est au tour du joueur R de jouer
     
    * Niveau : Facile
    9) Quelle equipe de football a remporté la coupe du monde 2018 en Russie ?
    Réponse A : Espagne
    Réponse B : Allemagne
    Réponse C : France
    Réponse D : Brésil
     
    Sélectionner la bonne réponse :
    France
    Bonne réponse !
     
    Le thème selectionné est le n°4 (Nature)
    C'est au tour du joueur I de jouer
     
    * Niveau : Facile
    14) Quel insecte transmet le paludisme ?
     
    Veuillez entrer votre réponse :
    Le moustique
    Bonne réponse !
     
     
    ** FIN DE LA PHASE 1 **
     
    SCORE DES JOUEURS : 
     
    E = 0 en 6 secondes
    L = 2 en 6 secondes
    R = 2 en 8 secondes
    I = 2 en 5 secondes
     
    //LISTE DES JOUEURS TRIES PAR SCORE ET TIMER
    I 2 en 5 secondes // Le premier
    L 2 en 6 secondes // Le deuxième
    R 2 en 8 secondes // Le troisième
    E 0 en 6 secondes // Le quatrième à éliminer
    Comme tu peux le voir, dans ce cas de figure c'est assez simple, le dernier est évident et on peut le retirer sans soucis. Mon seul problème est de gérer les conflits en cas d'égalité que ce soit entre le "dernier" et celui qui le précède, voir les 3 derniers, voir tous les joueurs.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Pour quoi faire ?

    Ce que tu veux savoir c'est si oui ou non il y a un blocage pour cause d'égalité, pas vrai ?

    Puisque tu as trié les joueurs, il y a blocage si le dernier est à égalité avec l'avant-dernier. Le reste est sans importance. Non ?

    Quoi qu'il en doit, Java ne propose pas de classe FaireExactementCeDontJAiBesoin, donc non, il n'y a pas "d'interface" pour identifier toutes les situations d'égalité où tu pourrais être. Il va falloir programmer toi-même celles dont tu as besoin.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Admettons que je compare je dernier avec l'avant dernier, très bien, mais si le deuxième est également égal a l'avant dernier et au dernier, je dois pouvoir sélectionner ces 3 là pour pouvoir les départager selon la politique. Il ne s'agit pas juste de comparer le dernier avec l'avant dernier

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    D'accord c'est effectivement plus compliqué.

    Mais il va falloir que tu programmes toi-même le fait de comparer les scores jusqu'à tomber sur un joueur qui a fait mieux que le dernier, histoire de départager tous ceux dont ce n'est pas le cas.

    Enfin ce ne sont pas les approches qui manquent. Tu pourrais aussi, sans trier les joueurs, chercher celui qui a fait le score minimal, puis sélectionner tous ceux qui ont le même score que lui.

    Sur une taille d'échantillon de 4, il n'y a pas lieu de chercher le plus efficace.

Discussions similaires

  1. Question / réponse MsgBox.
    Par Kiwix dans le forum Access
    Réponses: 1
    Dernier message: 26/01/2007, 17h02
  2. [M1][W1][D1?][N1?] Quelques suggestions de Question/Réponse.
    Par Mathieu Francesch dans le forum Contribuez
    Réponses: 5
    Dernier message: 23/08/2006, 14h37
  3. Conseils pour l'écriture de questions/réponses pour les FAQ
    Par LittleWhite dans le forum Contribuez
    Réponses: 0
    Dernier message: 18/05/2006, 20h15

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