Nom d'objet dynamique

Nom d'objet dynamique - Java - Programmation

Marsh Posté le 12-04-2007 à 15:24:58    

Hello  :hello:  
 
Je souahaiterais pouvoir créer des noms d'objet dynamiques, en fonction d'une chaine entrée par l'utilisateur.
 
Par exemple:
 

Code :
  1. Objet "chaine entrée par l'utilisateur" = new Objet()


 
Est-ce possible ?
 
merci d'avance  :jap:
 
P.S: je suppose que la chaine ne contiendra jamais d'espaces ;)

Message cité 1 fois
Message édité par ANViL le 12-04-2007 à 15:26:05
Reply

Marsh Posté le 12-04-2007 à 15:24:58   

Reply

Marsh Posté le 12-04-2007 à 15:38:20    

ANViL a écrit :

Hello  :hello:  
 
Je souahaiterais pouvoir créer des noms d'objet dynamiques, en fonction d'une chaine entrée par l'utilisateur.
 
Par exemple:
 

Code :
  1. Objet "chaine entrée par l'utilisateur" = new Objet()


 
Est-ce possible ?
 
merci d'avance  :jap:
 
P.S: je suppose que la chaine ne contiendra jamais d'espaces ;)


 
Mon Dieu. C'est une blague ? Pourquoi voudrais-tu faire une chose pareille ?
 
Edit - Pardon, j'ai même oublié de répondre : non, c'est impossible. Mais dis pourquoi tu veux faire ça, il y a sûrement un moyen de le faire sans révolutionner la "théorie de la compilation".


Message édité par boulgakov le 12-04-2007 à 15:44:29
Reply

Marsh Posté le 12-04-2007 à 15:51:15    

Initialement je voulais créer un nombre d'objet indéfinis, dans une boucle, et faire en sorte qu'à chaque itération l'objet porte le nom
 
"nom_objeti" (où i représente bien sûr la valeur de l'itération).
 
J'en suis donc arrivé à me demander si on pouvais créer dynamique un nom d'objet (ce qui en fait reviens presque au même).
 
Dommage que ça ne soit pas possible  :(

Reply

Marsh Posté le 12-04-2007 à 16:34:06    

ANViL a écrit :

Initialement je voulais créer un nombre d'objet indéfinis, dans une boucle, et faire en sorte qu'à chaque itération l'objet porte le nom
 
"nom_objeti" (où i représente bien sûr la valeur de l'itération).
 
J'en suis donc arrivé à me demander si on pouvais créer dynamique un nom d'objet (ce qui en fait reviens presque au même).
 
Dommage que ça ne soit pas possible  :(


 
Attends, là tu parles d'un nom de variable. Pourquoi veux-tu que les utilisateurs puissent choisir le nom de tes variables ? Et comment utilises-tu ces variables dans ton programme, ensuite ?
 
Tu dois faire une confusion, ce n'est pas un nom de variable que tu veux créer dynamiquement. Imagine que tu codes :
 

Code :
  1. int x = 0;
  2. uneFonctionQuiChangeLeNomDeLaVariable(x)
  3. x++ // FAUX ! x ne s'appelle plus, je ne peux plus y faire référence dans mon programme


 
Pas très utile...  
 
A quoi va te servir ensuite le "nom d'objet" dont tu parles, au juste ?
 

Reply

Marsh Posté le 12-04-2007 à 16:35:28    

ANViL a écrit :

Initialement je voulais créer un nombre d'objet indéfinis, dans une boucle, et faire en sorte qu'à chaque itération l'objet porte le nom
 
"nom_objeti" (où i représente bien sûr la valeur de l'itération).
 
J'en suis donc arrivé à me demander si on pouvais créer dynamique un nom d'objet (ce qui en fait reviens presque au même).
 
Dommage que ça ne soit pas possible  :(


 
 
Un
 

Code :
  1. monTableauDObjets[i]...


 
ne te convient pas ?

Reply

Marsh Posté le 12-04-2007 à 17:01:05    

fhr a écrit :

Un
 

Code :
  1. monTableauDObjets[i]...


 
ne te convient pas ?


 
Oui effectivement ça fonctionne aussi, mais c'est moins parlant qu'un nom personalisé (monTableauDObjets[i].methode , monTableauDObjets[i+1].methode.......)
 
Cela dit si c'est la seule façon de faire, je ferai avec  ;)

Reply

Marsh Posté le 12-04-2007 à 17:05:51    

ANViL a écrit :

Oui effectivement ça fonctionne aussi, mais c'est moins parlant qu'un nom personalisé (monTableauDObjets[i].methode , monTableauDObjets[i+1].methode.......)
 
Cela dit si c'est la seule façon de faire, je ferai avec  ;)


 
Tu fais avec une hashMap. Voire avec une LinkedHashMap si tu tiens à l'ordre de tes objets.
 
map.put(nom, objet)
 
et voilà.
 
Pour info, en Awk, je crois qu'on peut faire ce genre de trucs, mais je vois pas bien l'intérêt.

Reply

Marsh Posté le 12-04-2007 à 17:07:21    

ANViL a écrit :

Oui effectivement ça fonctionne aussi, mais c'est moins parlant qu'un nom personalisé (monTableauDObjets[i].methode , monTableauDObjets[i+1].methode.......)

 

Cela dit si c'est la seule façon de faire, je ferai avec  ;)


Les Map<String, String> s'pas fait pour les chiens [:petrus75]


Message édité par masklinn le 12-04-2007 à 17:08:00

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 12-04-2007 à 17:08:37    

gfive a écrit :

Tu fais avec une hashMap. Voire avec une LinkedHashMap si tu tiens à l'ordre de tes objets.
 
map.put(nom, objet)
 
et voilà.
 
Pour info, en Awk, je crois qu'on peut faire ce genre de trucs, mais je vois pas bien l'intérêt.


 
Ah OK, je viens de comprendre la question  :pt1cable: . Désolé pour mes réponses au-dessus, c'était peu utile...

Reply

Marsh Posté le 12-04-2007 à 18:19:39    

Ok, merci pour les réponses apportées  :jap:

Reply

Marsh Posté le 12-04-2007 à 18:19:39   

Reply

Marsh Posté le 21-11-2012 à 16:47:45    

Bonjour,

 

Désolé du déterrage, mais en quoi cela est stupide ?
Par exemple, je veux créer un nombre non définit d'objets qui représentent des joueurs, les noms des objets c'est tout simplement le nom des joueurs.

 

En quoi cela est un problème ?

 

Comment je pourrais faire une succession d'instanciation de la manière suivante :
(la variable "nb" (int) aurait été récupérée depuis une saisie clavier)

Code :
  1. Joueur[] objetsJoueurs = new Joueur[nb];
  2. for (int i=0;i<=nb;i++) {
  3.    String nom = inputScan.nextLine();
  4.    System.out.print("Nom Joueur:" );
  5.    Joueur nom = new Joueur();
  6.    objetsJoueurs[i] = nom;
  7. }
 

Et ensuite appeler chaque objet de la manière suivante :

Code :
  1. for (int i=o;i<=objetsJoueurs.length;i++) {
  2.    Joueur joueurPresent = (Joueur) objetsJoueurs[i];
  3.    joueurPresent.jouer();
  4. }
 

Merci pour vos réponses.

 

EDIT : J'ai trouvé la réponse : http://www.siteduzero.com/forum-83 [...] l#r7038738

Message cité 1 fois
Message édité par gammerx le 21-11-2012 à 17:27:43
Reply

Marsh Posté le 21-11-2012 à 19:18:45    

gammerx a écrit :

Bonjour,
 
Désolé du déterrage, mais en quoi cela est stupide ?
Par exemple, je veux créer un nombre non définit d'objets qui représentent des joueurs, les noms des objets c'est tout simplement le nom des joueurs.
 
En quoi cela est un problème ?


C'est un probleme parce que c'est pas possible. Et les reponses au-dessus a base de Map<String, Object> remplacent ca tres bien.
 

gammerx a écrit :

Comment je pourrais faire une succession d'instanciation de la manière suivante :
(la variable "nb" (int) aurait été récupérée depuis une saisie clavier)

Code :
  1. Joueur[] objetsJoueurs = new Joueur[nb];
  2. for (int i=0;i<=nb;i++) {
  3.    String nom = inputScan.nextLine();
  4.    System.out.print("Nom Joueur:" );
  5.    Joueur nom = new Joueur();
  6.    objetsJoueurs[i] = nom;
  7. }


 
Et ensuite appeler chaque objet de la manière suivante :

Code :
  1. for (int i=o;i<=objetsJoueurs.length;i++) {
  2.    Joueur joueurPresent = (Joueur) objetsJoueurs[i];
  3.    joueurPresent.jouer();
  4. }


 
Merci pour vos réponses.
 
EDIT : J'ai trouvé la réponse : http://www.siteduzero.com/forum-83 [...] l#r7038738


Ta reponse ne couvre pas ce que tu demandes (ie tes lignes Joueur "nom = new Joueur(); objetsJoueurs[i] = nom;" ); et encore heureux puisque ce n'est pas possible en Java. Mais je pense que tu as mal exprime ton besoin; si cette solution te convient, c'est que tu n'en as rien a faire que le nom de tes variables soit le nom du joueur (et t'as bien raison).
 
Edit: juste pour tester si tu comprends - dans ta deuxieme boucle:

Code :
  1. for (int i=o;i<=objetsJoueurs.length;i++) {
  2.    Joueur joueurPresent = (Joueur) objetsJoueurs[i];
  3.    joueurPresent.jouer();
  4. }


Comment tu comptes recuperer, pour affichage par exemple, le nom du joueur?  


Message édité par lasnoufle le 21-11-2012 à 19:22:19

---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 02-12-2012 à 16:05:41    

Bonjour,
 
Tout d'abord, merci de votre réponse !
 
(Comme indiqué précédemment (deux messages au dessus), la solution a été trouvée)
 
J'aurais tout simplement appelé le nom de l'objet, ou alors j'aurais fixé un attribut au joueur (qui aurait été initialisé via le constructeur).
 
Merci encore ! J'ai appris à manipuler un peu les collections (et les itérateurs), et ça simplifie grandement le travail ! :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed