Braille Java
Résolu
karkol
Messages postés
408
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un projet en java à faire.
Le programme que je dois développer doit lire un texte et le traduire en braille et vice versa.
Je ne pense pas que les switch case avec chaque caractère soit la meilleure solution où l'on remplacerait chaque caractère par un signe de braille.
Connaissez vous une solution meilleure et donc plus rapide à l'exécution?
Merci.
J'ai un projet en java à faire.
Le programme que je dois développer doit lire un texte et le traduire en braille et vice versa.
Je ne pense pas que les switch case avec chaque caractère soit la meilleure solution où l'on remplacerait chaque caractère par un signe de braille.
Connaissez vous une solution meilleure et donc plus rapide à l'exécution?
Merci.
A voir également:
- Braille Java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
Je ne suis pas vraiment un expert aguerri en Java, et je n'y connais rien en braille.
Mais, comme utilisateur de Perl, où créer des hash et les utiliser est tellement naturel et très performant pour ce type de problèmes, je me dirigerai plutôt vers un hash :
https://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html
voire : https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
où la représentation en braille peut servir de clef à la lettre correspondante (et inversement). Est-ce une mauvaise idée ?
Dal
PS. Hashtable est à proscrire depuis Java 2
Voici à quoi ressemble une classe enum en Java (pour la représentation en braille je considère successivement les 6 points de la matrice avec 1 s'il est en relief, 0 sinon).
J'ai testé ton code. Pour qu'il compile, je crois que ton main devrait être dans les accolades de Braille, et il semble que Java n'aime pas autre chose que "public" pour définir l'enum (et il faut que l'enum soit dans un Braille.java). Sinon, cela marche bien, c'est vraiment étonnant les enums en Java :-)
Avec HashMap, j'aurai fait deux Hash : un dont la clef est une lettre de l'alphabet, pour obtenir l'équivalent en braille, et l'autre dont la clef est la représentation en braille, pour obtenir la lettre de l'alphabet correspondante :
Cela me semble plus économique que de créer un enum. Je suppose qu'on peut aussi faire deux enums dans ton cas (dans deux fichiers .java je suppose...). J'ai un peu expérimenté, mais sans trop de succès, car Java me jette lorsque l'enum consiste en un chiffre tel que 100000.. cela ne serait pas un identificateur acceptable.
Merci pour ta précision sur "Hashtable", tu as tout à fait raison (comme quoi, il faut lire la doc jusqu'au bout).
Dal
Comme cela :
à moins qu'il y ait un moyen plus malin de copier les clefs et valeurs du premier dans le second en les permutant en utilisant les méthodes keySet() et values().
Dal
Non, rien de tout ça en fait.
J'ai effectivement un morceau de code, tu peux tester en rajoutant juste ça avant et après :
Du coup le fichier sera Test.java, le main est bien à part de la déclaration de l'enum. Le static c'est pour définir la classe interne, on pourra ainsi faire pour accéder à l'enum.
"j'aurai fait deux Hash : un dont la clef est une lettre de l'alphabet, pour obtenir l'équivalent en braille, et l'autre dont la clef est la représentation en braille, pour obtenir la lettre de l'alphabet correspondante"
Personnellement ça me dérange de faire un HashMap sur un caractère, parce que les wrapper comme Character sont bien plus lourd qu'un simple caractère en terme de consommation mémoire (certes là on en aura qu'une trentaine, mais dans l'esprit c'est mal), en plus cela signifie que l'on va utiliser un entier comme valeur de hachage d'un caractère (qui est plus petit).
Enfin, mais c'est plus technique, les enum permettent de manipuler des IdentityHashMap, ce qui permet de tester deux valeurs directement avec == et donc économiser un appel "coûteux" à la méthode equals. Du coup, un autre avantage est de pouvoir faire un switch sur la valeur des enum.
Après, je suis d'accord que pour être complet, une deuxième Map peut-être nécessaire pour faire la recherche dans l'autre sens, et comme je suis borné je ferais cette Map directement au sein de mon enum, ce qui complétera la méthode "valueOf" (générée automatiquement par l'enum) d'une méthode "valueByCode", elle aussi static :
Remarque : j'ai utilisé un String code, parce que si j'avais mis int code, on aurait pu avoir des problèmes avec les entiers commençant par 0, qui sont considérés en octal (j'avais fait la même triche hier avec le constructeur de l'enum.