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
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.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 LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|