Partage
  • Partager sur Facebook
  • Partager sur Twitter

tableau associatif

14 mai 2021 à 1:16:10

Bonjour,

Je souhaiterais créer un tableau associatif qui associerait l'identifiant d'un attribut à sa valeur. J'ai besoin de retourner les différentes valeurs correspondantes à un nombre saisie par un utilisateur.

1-ex: on crée le tableau associatif ci-dessous
map.put(1000, "coucou");
map.put(200, "c'est");
map.put(90, "moi");
map.put(2, "toto");

2-
a)l'utilisateur entre 202, on affiche à l'écran : c'est toto
b)l'utilisateur entre 1292, on affiche à l'écran : coucou c'est moi toto

Merci d'avance pour votre aide.
  • Partager sur Facebook
  • Partager sur Twitter
14 mai 2021 à 9:15:30

Bonjour,

les Map Java ne suffisent pas ? C'est pour un TP et tu dois créer ta propre implémentation ?

Pour les identifiants tu peux avoir 2 - 20 et 22 ? Si oui pas facile de différencier (2 + 20) et 22. L'idée ici est de faire une décomposition du nombre à l'aide de modulo et division.

-
Edité par rybla 14 mai 2021 à 9:18:15

  • Partager sur Facebook
  • Partager sur Twitter
18 mai 2021 à 12:21:26

Merci pour votre attention à ma préoccupation. je voudrais reformuler ma question par un autre cas de figure:

1- nous travaillons dans la base 10;
2- soit nb qui est le nombre entré par un utilisateur
a) si nb > 2000, on prend les 3 chiffres partant de la droite vers la gauche ( nb = 2750, on prend 750) et on vérifie
si la clé 750 a une valeur. (map.put(750 , "coucou")
et on affiche coucou ;
b) si 750 n'a pas de valeur, on décompose et on prend les valeurs correspondantes
map.put(700, "coucou ");
map.put(50, "c'est");
et on affiche coucou c'est
un autre exemple:
nb = 1092
map.put(1000, "coucou");
map.put(200, "c'est");
map.put(90, "moi");
map.put(2, "toto");
on affiche coucou moi toto

Merci d'avance pour votre aide.

  • Partager sur Facebook
  • Partager sur Twitter
18 mai 2021 à 13:41:15

Et moi je réponds.

Tu peux passer par une Map<Integer, Object> et décomposer ton nombre (avec des division / modulo etc.) ou Map<String, Object> et parser la chaine de caractères.

-
Edité par rybla 18 mai 2021 à 13:41:54

  • Partager sur Facebook
  • Partager sur Twitter
18 mai 2021 à 23:38:34

je te laisse passer le sujet en résolu si tu n'as plus de question :D
  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2021 à 4:58:28

C'est une Map<Integer, String>, pas une Map<Integer, Object>

Comme implémentation concrète HashMap, probablement.  Map c'est une interface (générique), pas une classe

La décomposition du nombre est un problème indépendant de la structure de données.

-
Edité par michelbillaud 19 mai 2021 à 5:00:33

  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2021 à 13:21:30

michelbillaud a écrit:

C'est une Map<Integer, String>, pas une Map<Integer, Object>

Comme implémentation concrète HashMap, probablement.  Map c'est une interface (générique), pas une classe

La décomposition du nombre est un problème indépendant de la structure de données.

-
Edité par michelbillaud il y a environ 8 heures

  • Toutes mes excuses pour cette erreur Map<Integer, String> vs Map<Integer, Object> ;).
  • Je te rejoins Map est bien une interface, je n'ai jamais dit le contraire sauf erreur.
  • Si j'ai bien compris le message l'auteur le soucis est sur la structure et la manière d'interroger la structure. Décomposer un nombre est donc important ici.  

-
Edité par rybla 19 mai 2021 à 13:21:53

  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2021 à 13:23:21

Et pourquoi ne pas passer par un Arbre ici ?
  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2021 à 14:01:09

On peut aussi passer par un Schroumpf, si tu montres comment tu vas utiliser le Schtroumpf dans le code qui résoud le problème. 

Sinon c'est juste des mots agités en l'air.

Une Map, ça permet d'avoir, en une instruction (méthode get), la valeur qui correspond à une clé.

  • Avec un HashMap, on l'obtient en temps constant (indépendant du nombre de clés)
  • Avec une SortedMap, en temps logarithmique. C'est moins bien.
Faut quand même pas être rocket scientist pour interroger une Map.     monEnsemble.get(laClé). Oh mon dieu que c'est dur :-)
Décomposer le nombre, genre à partir de 1234 fabrique le tableau  [1000, 200, 30, 4 ] c'est une autre histoire qui n'a rien à voir avec la map.
EDIT correction set->map. Je suis pas réveillé.

-
Edité par michelbillaud 19 mai 2021 à 14:46:35

  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2021 à 14:33:50

je ne cautionne pas. Laissons les Schtroumpf vivrent leur vie.

Passer par un arbre avec chaque nœuds qui contient un mot me semblait être une solution parmis d'autres.

  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2021 à 14:43:33

Alors explique en quoi ça simplifie les choses. Fais voir le code,  on verra si c'est plus simple qu'uns Map avec put et get.

PS: une SortedMap, il y a un arbre dedans avec une string dans chaque noeud pour le clé (et une autre autre pour la valeur associée). Pourquoi le réinventer ? La vie est trop longue et on n'a que ça a faire ?

-
Edité par michelbillaud 19 mai 2021 à 14:47:50

  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2021 à 14:49:01

michelbillaud a écrit:

Alors explique en quoi ça simplifie les choses. Fais voir le code,  on verra si c'est plus simple qu'un Set avec put et get.

Tu l'as vu ou ma phrase comme quoi c'est plus simple ou plus complexe ? Je propose une idée rien de plus. Il faut arrêter de vivre dans le monde des bisounours.

Une solution aura toujours des plus et des moins. Sauf la tienne qui semble la meilleure des meilleures sans défaut.

  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2021 à 15:23:27

K@zymir a écrit:

michelbillaud a écrit:

Alors explique en quoi ça simplifie les choses. Fais voir le code,  on verra si c'est plus simple qu'un Set avec put et get.

Tu l'as vu ou ma phrase comme quoi c'est plus simple ou plus complexe ? Je propose une idée rien de plus. Il faut arrêter de vivre dans le monde des bisounours.

Une solution aura toujours des plus et des moins. Sauf la tienne qui semble la meilleure des meilleures sans défaut.

Le bout de phrase "un arbre avec chaque noeud qui contient un mot", c'est une idée en l'air.  Quelles sont les opérations sur ton arbre ? Comment tu le programmes ? Arbre de recherche ? Equilibré  ou pas ?  Et en quoi est-ce une solution ?

 C'est vrai qu'il y toujours plusieurs solutions. Des bonnes, des raisonnables, des mauvaises, et des qui tiennent pas la route. Ton idée est dans quelle catégorie ? :-)

Mais tu as raison, un HashMap<String,String> c'est bien la meilleure idée, en fait. Sauf à montrer le contraire.

-
Edité par michelbillaud 19 mai 2021 à 15:29:10

  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2021 à 15:46:32

J'ai bien une idée sur ma solution mais le débat semble stérile avec une personne de ton intelligence et supériorité.

Ma solution est donc mauvaise. Je m'incline devant un HashMap THE solution que nous ne pouvons pas test.

Merci et bonne journée.

  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2021 à 15:57:31

Je rappelle la question

> Je souhaiterais créer un tableau associatif qui associerait l'identifiant d'un attribut à sa valeur.

Dans tableau associatif qui associe, tu ne vois pas Map ?

> HashMap THE solution que nous ne pouvons pas test.

Tester, tu veux dire. Mais si, nous pouvons nous en servir.

$ jshell 
|  Welcome to JShell -- Version 11.0.11
|  For an introduction type: /help intro

jshell> var map = new HashMap<Integer,String>();
map ==> {}

jshell> map.put(700, "coucou");
$2 ==> null

jshell> map.put(100, "hello");
$3 ==> null

jshell> map.get(100);
$4 ==> "hello"


par contre, pour ton Arbre, je ne vois pas. Tu veux bien nous montrer comment tu fais ?

-
Edité par michelbillaud 19 mai 2021 à 16:00:16

  • Partager sur Facebook
  • Partager sur Twitter