Accueil > > > ROMANOP : UN UTILITAIRE POUR LES NOMBRES ROMAINS (CONVERSION ROMAN -> ENTIERS, ENTIERS -> ROMAINS, CALCULS...)
ROMANOP : UN UTILITAIRE POUR LES NOMBRES ROMAINS (CONVERSION ROMAN -> ENTIERS, ENTIERS -> ROMAINS, CALCULS...)
Information sur la source
Description
Voici une utilitaire sur les nombres romains. Il permet la conversion de nombres romains vers les entiers et inversement. Il dispose aussi d'un méthode calc() qui prend deux chaines de caractères représentant deux nombres romains et un char correspondant à l'opérateur. Il retourne le résultat sous la forme d'une chaine de caractère représentant le résultat du calcul sous forme romaine. Cette classe est facilement utilisable pour tout code manipulant les nombres romains. Un class Main est incluse pour vous aider à comprendre son fonctionnement.
Source
- package romanop;
-
- import java.util.*;
-
- /**
- * @author Delache Michaël
- */
- public class RomanOp {
- private static final List<String> keys = new ArrayList<String>();
- private static final List<Integer> values = new ArrayList<Integer>();
-
- /**
- * Constructor of the RomanCalc class, initializes the two tables
- */
- public RomanOp() {
- keys.add("M");
- values.add(1000);
- keys.add("CM");
- values.add(900);
- keys.add("D");
- values.add(500);
- keys.add("CD");
- values.add(400);
- keys.add("C");
- values.add(100);
- keys.add("XC");
- values.add(90);
- keys.add("L");
- values.add(50);
- keys.add("XL");
- values.add(40);
- keys.add("X");
- values.add(10);
- keys.add("IX");
- values.add(9);
- keys.add("V");
- values.add(5);
- keys.add("IV");
- values.add(4);
- keys.add("I");
- values.add(1);
- }
- /**
- * Convert Roman to int
- * @param s Roman number
- * @return An int representing the roman number
- */
-
- public int toInt(final String s) {
- int res = 0;
- int size = s.length();
- String tmp = "";
- if (size == 1) {
- res = this.getInt(s);
- }
- if (size == 2) {
- if (keys.contains(s)) {
- res = this.getInt(s);
- }
- else {
- res += this.toInt(s.substring(0,1));
- res += this.toInt(s.substring(1,2));
- }
- }
- if (size > 2) {
- if (keys.contains(tmp = s.substring(size-2, size))) {
- res += this.getInt(tmp);
- res += this.toInt(s.substring(0, size-2));
- }
- else {
- tmp = s.substring(size-1, size);
- res += this.getInt(tmp);
- res += this.toInt(s.substring(0, size-1));
- }
- }
- return res;
- }
-
- /**
- * Returns the integer value of the roman value given by <i>s</i> or 0 if <i>s</i> is not in the table
- */
- public int getInt(final String s) {
- int res = 0;
- for (String str : keys) {
- if (str.equals(s)) {
- int index = keys.indexOf(str);
- res = values.get(index);
- }
- }
- return res;
- }
-
- /**
- * Converts integer value into roman value
- * @param i the integer to convert
- * @return a string representing the roman value
- */
- public String toRoman(final int i) {
- int cpt = i;
- String res = "";
- while (cpt > 0) {
- for (int j : values) {
- if ((cpt/j) >= 1) {
- int index = values.indexOf(j);
- res += keys.get(index);
- cpt -= j;
- break;
- }
- }
- }
- return res;
- }
-
- /**
- * Calculates the result of the operation determined by the two operands and the operator
- * @param x operand 1
- * @param y operand 2
- * @param op operator
- * @return the result
- */
- public String calc (final String x, final String y, final char op) {
- if (this.isOk(x) && this.isOk(y)) {
- int x1 = this.toInt(x);
- int y1 = this.toInt(y);
- switch (op) {
- case '+' :
- return this.toRoman(x1 + y1);
- case '-' :
- return this.toRoman(x1 - y1);
- case '*' :
- return this.toRoman(x1 * y1);
- case '/' :
- return this.toRoman(x1 / y1);
- default :
- break;
- }
- }
- return null;
- }
-
- /**
- * Says if the roman value given by <i>s</i> respect the roman value syntax
- * @param s the roman value to verify
- * @return true if <i>s</i> is correctly formed according to the roman value syntax (ie IV for 4 and not IIII), false else
- */
- public Boolean isOk(final String s) {
- int i = this.toInt(s);
- String str = this.toRoman(i);
- return s.equals(str);
- }
-
- }
package romanop;
import java.util.*;
/**
* @author Delache Michaël
*/
public class RomanOp {
private static final List<String> keys = new ArrayList<String>();
private static final List<Integer> values = new ArrayList<Integer>();
/**
* Constructor of the RomanCalc class, initializes the two tables
*/
public RomanOp() {
keys.add("M");
values.add(1000);
keys.add("CM");
values.add(900);
keys.add("D");
values.add(500);
keys.add("CD");
values.add(400);
keys.add("C");
values.add(100);
keys.add("XC");
values.add(90);
keys.add("L");
values.add(50);
keys.add("XL");
values.add(40);
keys.add("X");
values.add(10);
keys.add("IX");
values.add(9);
keys.add("V");
values.add(5);
keys.add("IV");
values.add(4);
keys.add("I");
values.add(1);
}
/**
* Convert Roman to int
* @param s Roman number
* @return An int representing the roman number
*/
public int toInt(final String s) {
int res = 0;
int size = s.length();
String tmp = "";
if (size == 1) {
res = this.getInt(s);
}
if (size == 2) {
if (keys.contains(s)) {
res = this.getInt(s);
}
else {
res += this.toInt(s.substring(0,1));
res += this.toInt(s.substring(1,2));
}
}
if (size > 2) {
if (keys.contains(tmp = s.substring(size-2, size))) {
res += this.getInt(tmp);
res += this.toInt(s.substring(0, size-2));
}
else {
tmp = s.substring(size-1, size);
res += this.getInt(tmp);
res += this.toInt(s.substring(0, size-1));
}
}
return res;
}
/**
* Returns the integer value of the roman value given by <i>s</i> or 0 if <i>s</i> is not in the table
*/
public int getInt(final String s) {
int res = 0;
for (String str : keys) {
if (str.equals(s)) {
int index = keys.indexOf(str);
res = values.get(index);
}
}
return res;
}
/**
* Converts integer value into roman value
* @param i the integer to convert
* @return a string representing the roman value
*/
public String toRoman(final int i) {
int cpt = i;
String res = "";
while (cpt > 0) {
for (int j : values) {
if ((cpt/j) >= 1) {
int index = values.indexOf(j);
res += keys.get(index);
cpt -= j;
break;
}
}
}
return res;
}
/**
* Calculates the result of the operation determined by the two operands and the operator
* @param x operand 1
* @param y operand 2
* @param op operator
* @return the result
*/
public String calc (final String x, final String y, final char op) {
if (this.isOk(x) && this.isOk(y)) {
int x1 = this.toInt(x);
int y1 = this.toInt(y);
switch (op) {
case '+' :
return this.toRoman(x1 + y1);
case '-' :
return this.toRoman(x1 - y1);
case '*' :
return this.toRoman(x1 * y1);
case '/' :
return this.toRoman(x1 / y1);
default :
break;
}
}
return null;
}
/**
* Says if the roman value given by <i>s</i> respect the roman value syntax
* @param s the roman value to verify
* @return true if <i>s</i> is correctly formed according to the roman value syntax (ie IV for 4 and not IIII), false else
*/
public Boolean isOk(final String s) {
int i = this.toInt(s);
String str = this.toRoman(i);
return s.equals(str);
}
}
Conclusion
Bien évidemment, vous êtes entièrement libre (et même encouragés) de modifier/copier/distribuer ce source.
Si vous voyez des améliorations et/ou bugs dans ce code, je vous invite à me prévenir par email.
Vous pourrez récupérer, ci-joint, un fichier zip contenant les dossier src (source) et doc (Documentation Java) ainsi qu'un fichier jar exécutable.
Historique
- 03 juin 2008 15:19:38 :
- Modification des modificateurs pour les attributs keys et values afin de les rendre static
- 03 juin 2008 16:39:01 :
- Modification du code de la méthode calc.
Tests "if" remplacés par un switch
- 04 juin 2008 11:38:32 :
- Modifications mineures dont quelques appels non statiques changés en appels statiques vers les attributs keys et values de la classe RomanOp
- 04 juin 2008 11:39:02 :
- Modifications mineures dont quelques appels non statiques changés en appels statiques vers les attributs keys et values de la classe RomanOp
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Conversion String / Int [ par Skeetle ]
J'ai un petit soucis, je cherche desespérément à convertir une String en entier...Je m'expliqueDans le code " String toto = "2"; ", je veux pouvoir
Aide conversion entier => binaire [ par djiaydjo ]
Salut la rooums;Voila je suis entrain de faire un petit programme et dans ce dernier j'aurai besoin de convertir un entier en binaire.J'ai vu qu'il y
conversion d'une chaine de caractére en entier [ par moooonaaaa ]
Salem,j'ai une chaine de caractére de la forme suivante"a.b.c.d"je veux faire un test sur ces valeurs.Il faut que tous soit des entiers.j'utilise Toke
2003-02-01 to 01/02/2003 conversion ou quoi ?? [ par amine1234Z ]
Salutlorsque je click sur un bouton, la zone de texte txt_Valeur reçoit comme valeur: 2003-02-01 moi je veux la rendre comme : 01/02/2003est ce que je
Remplacement d'un mot par le renvoi d'une fonction dans un string [ par tenev911 ]
Bonjour, J'ai un problème plutot génant, j'ai posté ce sujet sur developpez.com sans grand résultat, j'aurai surement plus de chance ici :) J'ai act
applets, écouteurs d'évènement [ par hiera ]
Bonjour, je suis un débutant en développement java et jaimerai savoir comment je pourrais écrire un programme permettant à l'utilisateur de saisir un
tester si la zone de texte contien des nombres et pas des caractaires [ par amine1234Z ]
Salut voila comme le titre de cette discution l'indique, j'ai une Zone de texte TXTO qui est distiner pour contenire un nombre réelString SSSS=TXTO
vecteur d'entier [ par nadap ]
Salut à tous, j'ai un probleme avec un vecteur d'entier.j'inserte des int dans un vecteur et quand je veux les recupérer plus tard, il me parle d'inco
Les Exceptions en java [ par Rody88 ]
Bonjour tout le monde;je débute avec les Exception en java ,voici mon code :do{ valide=true; System.out.println("Entrez un entier :"
Problème de conversion Image en byte[] et byte[] en Image [ par kigrez ]
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|