Version java de : romanutils, tout pour convertir les chiffres romains vers les entiers et inversement

Soyez le premier à donner votre avis sur cette source.

Vue 15 290 fois - Téléchargée 326 fois

Description

Rapide portage de l'excellente source Delphi disponible à
http://www.delphifr.com/code.aspx?ID=34428

Source / Exemple :


public class RomanUtils 
{
	private final static String[] acceptedchar={"I","V","X","L","C","D","M"};
	
	private final static String[] _RRUTR = {"","I","II","III","IV","V","VI","VII","VIII","IX"};
	private final static String[] _RRDTR = {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
	private final static String[] _RRCTR = {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
	private final static String[] _RRMTR = {"","M","MM","MMM","","","","","",""};

	
	/**

  • Validate if the string entered is a right Roman number
  • @param val
  • @return true if ok
  • /
static boolean IsRomanNumber(String val) { boolean actuval; for (int i=0;i<val.length();i++) { actuval=false; for (int j=0;j<acceptedchar.length;j++) if (val.substring(i, i+1).equals(acceptedchar[j])) actuval=true; if (actuval==false) return false; } return true; } /**
  • Validate if the entered integer value is in the accepted limits
  • @param val
  • @return true if ok
  • /
static boolean IsRomanNumber(int val) { if ((val>0)&&(val<=39999)) return true; return false; } /**
  • return the value of a Roman figure
  • @param vv = The figure
  • @return The corresponding value
  • /
static int RomanCharToValue(char vv) { switch (vv) { case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; } return 0; } /**
  • Return the Roman number string corresponding to the value entered.
  • @param value to convert
  • @return String value
  • /
public static String IntToRoman(int i) { if (IsRomanNumber(i)) { if (i>=0 && i<=9) return _RRUTR[i]; if (i>=10 && i<=99) return _RRDTR[i / 10]+ _RRUTR[i % 10]; if (i>=100 && i<=999) return _RRCTR[i / 100]+ _RRDTR[(i / 10) % 10]+ _RRUTR[i % 10]; if (i>=1000 && i<=3999) return _RRMTR[i / 1000]+_RRCTR[(i / 100) % 10]+_RRDTR[(i / 10) % 10]+_RRUTR[i % 10]; }//endif return ""; } /**
  • Return the int value correspondif of a Roman String entered
  • @param value in roman figures
  • @return int value
  • /
public static int RomanToInt(String RN) { int oc,NewRV,OldRV=0,Result=0; if (IsRomanNumber(RN)) { for (oc=0;oc<RN.length();oc++) { NewRV = RomanCharToValue(RN.toCharArray()[oc]); if (NewRV > OldRV) { Result+=NewRV-(OldRV<<1); }else { Result+=NewRV; }//endif OldRV=NewRV; }//endfor }else return -1;//endif return Result; } }

Conclusion :


Je ne me suis pas amusé à faire des tests de performance...
De toutes façons, je doute qu'un jour ce soit utilisé dans des flux tendus.
Et si c'est le cas, le boulot est prémâché...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
21 janvier 2012

L'algorithme ne respecte pas les conventions de Notation romaine voir http://fr.wikipedia.org/wiki/Num%C3%A9ration_romaine

dans l'exemple VV donne 10 alors que cette notation est incorrecte

jndisanze
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
Oh! translation 1:1 de ma source en Java (a 98% je peux pas verifier l'exactitude du code java)!
Mais bon boulot, traduire d'un langage a l'autre demande pas mal de competence l'exercice semble reussi ici, felicitation!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.