[LASJ1]TD14 le morse

Voir le sujet précédent Voir le sujet suivant Aller en bas

[LASJ1]TD14 le morse

Message  trikman le Jeu 25 Fév 2010, 16:30

bonjour,

je suis en train de faire le td14 mais je cale lors de la compilation de traducteurmorse ,
il note :

TraducteurTexte.java:9: <identifier> expected
map = new HashMap<String,Code>;
^
1 error

pourquoi <identifier> expected et pourquoi le signe en dessous de mon "=" ??
et aussi une deuxieme chose, j ai essayé plusieurs manipulation au niveau de l'écriture, est-ce la bonne?

il est a noté aussi que je n'ai pas complètement compris comment fonctionnait la classe map/hashmap , j ai été voir les slides, le site du zero tout ce que vous voulez lol mais rien n y fait, je trouve pas la solution Sad


voici mes codes:

Code.java :
Code:
package td14.morse;
public class Code{
   private char lettre;
   private String code;

   public Code(char let,String str){

      lettre = let;
      code = str;
   }
   public char getLettre(){
      return lettre;
   }
   public String getCode(){
      return code;
   }
   public String toString(){
      String phr = "la lettre : " + this.lettre +" correspond au code morse : " + this.code;
      return phr;
   }
}

traducteurmorse.java :

Code:
package td14.morse;
import java.util.Map;
import java.util.HashMap;
public class Traducteurmorse{



   private Map<char,Code> map;
      map = new HashMap<Char,Code>;

   public Traducteurmorse(){

      map = new HashMap<Char,Code>();
   }

   public void addCode(Code cod){

      map.put(cod);
   }

   public String getCode(char let){
      String str;
      str = map.get(let);
      return str;
   }
}

merci d'avance,
Martin Autenne

trikman

Nombre de messages : 68
Prénom : martin
Date d'inscription : 04/11/2009

Revenir en haut Aller en bas

Re: [LASJ1]TD14 le morse

Message  trikman le Jeu 25 Fév 2010, 16:31

ps: le "^" est censé etre en dessous du "="

trikman

Nombre de messages : 68
Prénom : martin
Date d'inscription : 04/11/2009

Revenir en haut Aller en bas

Re: [LASJ1]TD14 le morse

Message  Wark le Jeu 25 Fév 2010, 17:04

Il manque un () pour moi... (mais je n'ai pas plus regardé que ça :-) )

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [LASJ1]TD14 le morse

Message  pbt le Jeu 25 Fév 2010, 17:14

Code:
private Map<char,Code> map;
      map = new HashMap<Char,Code>;

  public Traducteurmorse(){

      map = new HashMap<Char,Code>();
  }

Ça ne te parrait pas bizarre d'instancier 2 fois ta Map; une fois dans le construteur et une fois n'importe où ?

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [LASJ1]TD14 le morse

Message  karemkadidola le Jeu 25 Fév 2010, 21:01

Quelques erreurs dans ton code en plus de celle mentionné par Mr Pbt notamment instancier ta map au milieu de nulle part (garde juste l'instanciation qui se trouve dans le constructeur)
erreur 2
private Map<char,Code> map;

ta map tu lui donne un type primitif alors qu'il lui faut toujours un type reference donc tu dois écrire "Character" au lieu de "char" cfr "wrapper" boxing/autoboxing

erreur 3
public void addCode(Code cod){

map.put(cod);
}
dans une map on ajoute toujours un couple de "clé"+"valeur de la clé" donc map.put(cod.getLettre(),cod);

erreur 4
public String getCode(char let){
String str;
str = map.get(let);
return str;
}
ici déjà tu essayes de mettre un code dans une variable de type string et le retourner .....donc il faut encore extraire le string de ce code avant de retourner quoique ça soit solution: return map.get(let).getCode();

je vais finir par un conseil d'ami essaye d'ajouter une methode qui te retourne ton attribut (ta map) c'est souvent très utile notamment dans le main ça te permet de manipuler par après à ton aise les éléments de ta map....en esperant avoir aidé salut

karemkadidola

Nombre de messages : 244
Prénom : aimé
Date d'inscription : 13/10/2009

Revenir en haut Aller en bas

Re: [LASJ1]TD14 le morse

Message  Wark le Jeu 25 Fév 2010, 21:48

karemkadidola a écrit:je vais finir par un conseil d'ami essaye d'ajouter une methode qui te retourne ton attribut (ta map) c'est souvent très utile notamment dans le main ça te permet de manipuler par après à ton aise les éléments de ta map....en esperant avoir aidé salut

J'aime bien tous tes conseils, sauf celui-là. Quid de l'encapsulation et de l'OO en faisant ça ?

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [LASJ1]TD14 le morse

Message  karemkadidola le Jeu 25 Fév 2010, 22:54

Quid de l'encapsulation et de l'OO en faisant ça ?

ça ne change rien dans le sens mm de l'orienté objet ni de l'encapsulation car c'est l'objet lui même qui retourne sont attribut c'en un bête getter si tu veux..avec juste une nuance que l'attibut ici est une map...ce n'est pas comme si un programme extérieur venait modifier la valeur des attibuts...après tout n'est ce pas à ça que servent les getters dans l'OO pour qu'on puisse disposer des valeurs des attibuts privés en dehors de la classe...

karemkadidola

Nombre de messages : 244
Prénom : aimé
Date d'inscription : 13/10/2009

Revenir en haut Aller en bas

Re: [LASJ1]TD14 le morse

Message  trikman le Jeu 25 Fév 2010, 23:12

oh genial ca compile Smile Smile Smile

merci a vous de m avoir eclairci, cela m a été d une aide precieuse Smile

trikman

Nombre de messages : 68
Prénom : martin
Date d'inscription : 04/11/2009

Revenir en haut Aller en bas

Re: [LASJ1]TD14 le morse

Message  mcd le Jeu 25 Fév 2010, 23:13

karemkadidola a écrit:ça ne change rien
Mais c'est différent si tu retournes une valeur primitive ou une valeur référence (comme un objet ou un tableau).
Si la méthode retourne un primitif, elle retourne la valeur (donc une copie) de ce primitif.
Le code appelant ne peux pas modifier l'attribut privé via ce getter.
PAR CONTRE, si la méthode retourne un objet, elle retourne une copie de la REFERENCE vers cet objet.
Dans la cas d'une Map, qui est bien un objet, elle retourne donc une référence vers le Map privé et PAS UNE COPIE.
Le code appelant a donc une référence vers ce Map privé et pourrait le modifier à loisir sans passer par les méthodes ad-hoc.
C'est un trou dans la sécurité -> la programmation défensive recommande de COPIER tous les attributs références avant de les retourner Smile

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

Re: [LASJ1]TD14 le morse

Message  nvs le Jeu 25 Fév 2010, 23:19

karemkadidola a écrit:
Wark a écrit: Quid de l'encapsulation et de l'OO en faisant ça ?

ça ne change rien dans le sens mm de l'orienté objet ni de l'encapsulation car c'est l'objet lui même qui retourne sont attribut c'en un bête getter si tu veux..avec juste une nuance que l'attibut ici est une map...ce n'est pas comme si un programme extérieur venait modifier la valeur des attibuts...après tout n'est ce pas à ça que servent les getters dans l'OO pour qu'on puisse disposer des valeurs des attibuts privés en dehors de la classe...
sauf que c'est un getter qui retourne une référence (de map)... il y a donc, par son biais, possibilité de modifier un attribut (la map) sans contrôle de sa classe (genre on désire exclure certaines valeurs)... Wark a raison : ça sent pas bon...








[edt] brûlé par marco codutti sur ce coup... mais on est d'accord Very Happy

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LASJ1]TD14 le morse

Message  karemkadidola le Ven 26 Fév 2010, 17:01

super je viens encore une fois d'apprendre quelque chose thanks to everyone

à trikam laisse moi le plaisir de te dire ce qu'on me disait quand j'ai commencé à frequenter ce site "tu peux marquer le sujet comme étant Problem solved

karemkadidola

Nombre de messages : 244
Prénom : aimé
Date d'inscription : 13/10/2009

Revenir en haut Aller en bas

Re: [LASJ1]TD14 le morse

Message  Contenu sponsorisé Aujourd'hui à 14:28


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum