Fonction qui transforme un String en NumeroTel, ajout annuaire

Résolu/Fermé
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013 - Modifié par hedii le 15/06/2013 à 11:45
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013 - 15 juin 2013 à 15:38
Bonjour, je ne sais comment modfier ma methode actionPerformed pour utiliser la fonction stringToNumeroTel puis la fonction ajouter.

Voici la classe et la methode ajouter qui est dans la classe Annuaire, il existe d'autres classes, en particulier NumeroTel:

class Bouton1 implements ActionListener {

/** Creates a new instance of Bouton1 */
public Bouton1() {
}

public NumeroTel stringToNumeroTel(String numero, String delimiteur)
throws java.util.NoSuchElementException {
java.util.StringTokenizer token = new java.util.StringTokenizer(numero, delimiteur);
if (token.countTokens()!=5)
throw new java.util.NoSuchElementException("Format de Numero de Tel incorrect");
int i1 = (new Integer(token.nextToken())).intValue();
int i2 = (new Integer(token.nextToken())).intValue();
int i3 = (new Integer(token.nextToken())).intValue();
int i4 = (new Integer(token.nextToken())).intValue();
int i5 = (new Integer(token.nextToken())).intValue();
return new NumeroTel(i1, i2, i3, i4, i5);
}

public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Ajout abonne")) {
Annuaire annuaire = new Annuaire();
String nom = abonne.getText();
String num = numero.getText();
}
}
}

________________________________________________________________________

pubic class Annuaire {

Hashtable parNoms = new Hashtable();
Hashtable parNumeros = new Hashtable();

public Annuaire() {
}

public void ajouter(String nom, NumeroTel numero) {
parNoms.put(nom, numero);
parNumeros.put(numero, nom);
}

[...]

}

________________________________________________________________________


public class NumeroTel {

private NumeroTel numero;
private int a;
private int b;
private int c;
private int d;
private int e;
/** Creates a new instance of NumeroTel */
public NumeroTel(int a,int b,int c,int d,int e) {
}

public boolean Comparaison (NumeroTel numero1) {
if (numero.equals(numero1)){
return true;
}
else {
return false;
}
}

public NumeroTel getNumero() {
return numero;
}

public String toString() {
return ""+numero;
}


}

2 réponses

KX Messages postés 16597 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 septembre 2022 2 975
Modifié par KX le 15/06/2013 à 15:18
L'un des intérêts d'une classe est de stocker une valeur en mémoire en limitant autant que possible la taille de cette valeur.

Par exemple un numéro de téléphone à 10 chiffres :

Il peut-être représenté par un String (ou un char[]) dans ce cas il y a autant de caractères que de chiffres, donc une taille de 10 octets.

Il y a également la possibilité comme tu l'as fait de faire 5 entiers, mais tu utilises des int, qui font 4 octets chacun, ce qui te fait une représentation à 20 octets.

Dans la mesure où tes entiers doivent tous être entre 00 et 99, tu pourrais utiliser des byte à la place des int, donc 5 byte ce qui ferait une représentation à 5 octets.

Encore mieux, en France et dans d'autres pays, tous les numéros commencent par 0, du coup ce n'est pas la peine de le stocker et on peux se limiter aux 9 chiffres significatifs, qui rentrent facilement dans un seul int, donc une représentation à 4 octets.

Ainsi, au lieu d'avoir 5 int tu peux t'en sortir avec 1 seul ! C'est économe en mémoire et plus facile à gérer vu que tu n'auras qu'un seul attribut privé.

PS. je ne comprends pas ce que tu veux faire avec ton attribut "NumeroTel numero", à mon avis il ne sert à rien, tu dois confondre avec this.

public class NumeroTel
{
    /**
     * 9 chiffres significatifs du numéro de téléphone (le 0 est implicite)
     * Exemple : "01.23.45.67.89" --> numero=123456789
     */
    private final int numero;

Le gros avantage de cette représentation c'est pour tes Hashtable parce que tu ne l'as pas géré du tout dans ton code, mais le hashCode de ta classe NumeroTel doit être redéfini, et puisque c'est un int, ici c'est immédiat, il suffit de renvoyer l'attribut numero qui garantie une bonne valeur de hachage !

    @Override
    public int hashCode()
    {
        return numero;
    }
La confiance n'exclut pas le contrôle
0
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
15 juin 2013 à 15:38
Merci pour votre reponse KX, c'est un exercice de TP je dois gardeer 5 entiers et utiliser la fonction pour convertir en string.
0