Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import junit.framework.TestCase;
- public class RomanNumerEncoderTest extends TestCase {
- public void testEncode() {
- assertEncode("", 0);
- assertEncode("I", 1);
- assertEncode("II", 2);
- assertEncode("III", 3);
- assertEncode("IV", 4);
- assertEncode("V", 5);
- assertEncode("VI", 6);
- assertEncode("IX", 9);
- assertEncode("X", 10);
- assertEncode("XI", 11);
- assertEncode("XL", 40);
- assertEncode("L", 50);
- assertEncode("XC", 90);
- assertEncode("C", 100);
- assertEncode("D", 500);
- assertEncode("M", 1000);
- assertEncode("MDCCCLXXVIII", 1878);
- assertEncode("MCMLIII", 1953);
- assertEncode("MMXI", 2011);
- assertEncode("XCIX", 99);
- assertEncode("CMXC", 990);
- }
- private void assertEncode(String numeral, int arabicNumber) {
- assertEquals(numeral, new RomanNumberEncoder().encode(arabicNumber));
- }
- }
- class RomanNumberEncoder {
- private static final int[] decimalValueOfRomanNumeral = {
- 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1
- };
- private static final String[] romanNumeral = {
- "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"
- };
- private int currentArabicRemainder;
- private StringBuilder romanNumeralTemp = new StringBuilder();
- public String encode(int pArabicNumber) {
- initTemporaryMenbers(pArabicNumber);
- appendElementaryNumeralsAsNeeded();
- return encodedRomanNumeralString();
- }
- private void initTemporaryMenbers(int pArabicNumber) {
- currentArabicRemainder = pArabicNumber;
- romanNumeralTemp = new StringBuilder();
- }
- private void appendElementaryNumeralsAsNeeded() {
- for (int i = 0; isMoreElementarNumeralsNeededAndAvailable(i); i++) {
- appendElementaryNumeralGroupForIndex(i);
- }
- }
- private boolean isMoreElementarNumeralsNeededAndAvailable(int i) {
- return (i < decimalValueOfRomanNumeral.length)
- && (0 < currentArabicRemainder);
- }
- private void appendElementaryNumeralGroupForIndex(int pElementaryNumeralIndex) {
- while (currentArabicRemainder >= decimalValueOfRomanNumeral[pElementaryNumeralIndex]) {
- romanNumeralTemp.append(romanNumeral[pElementaryNumeralIndex]);
- currentArabicRemainder -= decimalValueOfRomanNumeral[pElementaryNumeralIndex];
- }
- }
- private String encodedRomanNumeralString() {
- assert (0 == currentArabicRemainder);
- return this.romanNumeralTemp.toString();
- }
- }
Add Comment
Please, Sign In to add comment