Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
834 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Comment "nommer" un objet pour le retrouver (String) ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment "nommer" un objet pour le retrouver (String) ?

n°2332912
Lt Ripley
Ils ont tout niqué
Posté le 03-05-2019 à 14:16:57  profilanswer
 

Bonjour
 
C'est pas la première fois que je suis bloqué à ce niveau.  Je suis sur le puzzle Darts de CodinGame, et je dois donc gérer une partie de flechettes, avec des joueurs et leurs scores qui augmentent.  Je ne sais pas si c'est ça qu'il faut faire mais par exemple nommer mes objets User avec leur nom (joe, jack, billy) pour pouvoir les retrouver et augmenter leur score au fil des tours de tirs ?
 
Je ne sais pas comment faire.
 
A chaque tour CodinGame m'envoie un String "Nom du joueur" puis son tir (int X, int Y sur la cible)
 
Merci d'avance si vous pouvez m'aider


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
mood
Publicité
Posté le 03-05-2019 à 14:16:57  profilanswer
 

n°2332954
DDT
Few understand
Posté le 03-05-2019 à 22:57:16  profilanswer
 
n°2332958
Lt Ripley
Ils ont tout niqué
Posté le 04-05-2019 à 06:58:29  profilanswer
 

Merci !


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
n°2333045
Lt Ripley
Ils ont tout niqué
Posté le 06-05-2019 à 14:59:44  profilanswer
 

Ça fonctionne très bien, merci encore
 
Bon maintenant je dois trier par scores, descendant, ET, en cas d'égalités, par ordre d'arrivée dans le jeu
 
Alors là je réfléchiiiiiiiis :lol:


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
n°2333056
DDT
Few understand
Posté le 06-05-2019 à 17:10:47  profilanswer
 

Une SortedMap (TreeMap par exemple) peut conserver ta collection de clés-valeurs dans un ordre arbitraire, mais le tri peut uniquement se faire sur les clés.

 

Si ta collection de joueurs n'est pas énorme, tu peux sans problème la trier à chaque appel.
Si tu veux vraiment la maintenir dans un ordre qui dépend des clés et des valeurs, il doit y avoir moyen en combinant plusieurs structures de données comme TreeMap, PriorityQueue, BiMap (dans Google Guava), etc.

Message cité 1 fois
Message édité par DDT le 06-05-2019 à 17:11:06

---------------
click clack clunka thunk
n°2333062
masklinn
í dag viðrar vel til loftárása
Posté le 06-05-2019 à 18:24:24  profilanswer
 

DDT a écrit :

Une SortedMap (TreeMap par exemple) peut conserver ta collection de clés-valeurs dans un ordre arbitraire, mais le tri peut uniquement se faire sur les clés.
 
Si ta collection de joueurs n'est pas énorme, tu peux sans problème la trier à chaque appel.


Surtout qu'avec le timsort de java 7, trier une collection quasi-triée est très efficace. Sinon, treeset avec un comparateur custom je présume (priorityqueue ça donne le min/max, mais toute la collection n'est pas nécessairement triée). Par contre faut bien penser à sortir l'élément, le mettre à jour puis le réinsérer, si l'objet est modifié en place la collection le verra pas et va pas le bouger au bon endroit.
 
Tu peux utiliser une hashmap pour indexer, ou même faire une recherche linéaire s'il y a peu d'entrées ce sera beaucoup plus rapide.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2333082
Lt Ripley
Ils ont tout niqué
Posté le 06-05-2019 à 21:12:18  profilanswer
 

Merci, je vais étudier vos pistes


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
n°2333098
Lt Ripley
Ils ont tout niqué
Posté le 07-05-2019 à 00:32:20  profilanswer
 

Warf j'y suis arrivé, avec un Comparator maison :
 

Code :
  1. private static Comparator<Member> compare = new Comparator<Member>() {
  2.  
  3.        public int compare (Member member1, Member member2) {
  4.  
  5.            int comparaisonScore = Integer.compare(member2.getScore(), member1.getScore());
  6.  
  7.            if (comparaisonScore != 0)  {return comparaisonScore;}
  8.  
  9.            else {
  10.                int position1 = member1.getPosition();
  11.                int position2 = member2.getPosition();
  12.  
  13.                return Integer.compare(position1, position2);
  14.            }
  15.        }
  16.    };


 
(position1 et 2 c'est l'ordre d'arrivée des Users dans le jeu, je m'en sert si le score est égal)
 
Il y a longtemps que je voulais arriver à faire un double tri (trier sur 2 critères)
 
J'y suis arrivé avec 2 HashMap, 1 avec nom du joueur et son score, l'autre avec nom du joueur et sa position dans l'ordre d'arrivée, ensuite je mets tout dans des objets Members (nom, score, position) que je mets dans un arrayList que je trie (Collections.sort)
 
 [:cerveau d]  
 
Je suis pas arrivé à le pondre moi même, j'ai trouvé sur le web un gars qui trie sur 3 critères


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
n°2333099
masklinn
í dag viðrar vel til loftárása
Posté le 07-05-2019 à 08:12:40  profilanswer
 

Si t'es en Java 8, Comparator a pas mal de nouvelles méthodes pour faciliter ou combiner. Ici au lieu d'un comparateur custom tu pourrais utiliser

Code :
  1. Comparator.comparingInt(Member::getScore).thenComparingInt(Member::getPosition)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2333105
Lt Ripley
Ils ont tout niqué
Posté le 07-05-2019 à 09:55:32  profilanswer
 

Ahh oui je vais essayer


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
mood
Publicité
Posté le 07-05-2019 à 09:55:32  profilanswer
 

n°2333138
Lt Ripley
Ils ont tout niqué
Posté le 07-05-2019 à 13:37:24  profilanswer
 

Marche très bien.  Et très compact
 

Code :
  1. Collections.sort(list, Comparator.comparingInt(Member::getScore).reversed().thenComparingInt(Member::getPosition));


 
Merci !


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
n°2333198
Lt Ripley
Ils ont tout niqué
Posté le 07-05-2019 à 18:45:45  profilanswer
 

J'ai tout refondu mon code, j'ai plus que une HashMap<String, Member>.  Au fil des tours j'extrais mes members, je modifie le score et je les réinsère.  A la fin je parcours le HashMap pour tout mettre dans un ArrayList et faire mon fameux tri.  Je vais voir si comme il me semble que vous m'avez conseillé je peux trier le HashMap ou utiliser un Tree


---------------
Mes apps  |  Viens coder  |  Mon topal de vente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Comment "nommer" un objet pour le retrouver (String) ?

 

Sujets relatifs
Fichier JSON to stringMail : Lecture de l'emetteur et ou de l'objet
Programmation orienté objetUndefined reference to... un objet non appelé
appel des methodes statiques String et booleen dans une meme classeDemande de delocage conversion String en booleen
[VBA] formatage stringNommer un fichier aléatoirement
question sur la méthode de Viola et Jones sur la detection d'objetInstance d'objet
Plus de sujets relatifs à : Comment "nommer" un objet pour le retrouver (String) ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR