Mercurial > repos > timpalpant > java_genomics_toolkit
view src/edu/unc/utils/RomanNumeral.java @ 2:e16016635b2a
Uploaded
author | timpalpant |
---|---|
date | Mon, 13 Feb 2012 22:12:06 -0500 |
parents | |
children |
line wrap: on
line source
package edu.unc.utils; // Rudimentary Class for doing Arabic Integer -> Roman Numeral conversion // Adapted by Timothy Palpant // File : gui/componenents/calculators/Roman.java // Description: A static method for converting binary integers to Roman numbers. // Illustrates: Static inner value class, StringBuffer, throw exceptions. // Author : Fred Swartz - 2006-12-29 - Placed in public domain. public class RomanNumeral { // This could be alternatively be done with parallel arrays. // Another alternative would be Pair<Integer, String> final static RomanValue[] ROMAN_VALUE_TABLE = { new RomanValue(1000, "M"), new RomanValue( 900, "CM"), new RomanValue( 500, "D"), new RomanValue( 400, "CD"), new RomanValue( 100, "C"), new RomanValue( 90, "XC"), new RomanValue( 50, "L"), new RomanValue( 40, "XL"), new RomanValue( 10, "X"), new RomanValue( 9, "IX"), new RomanValue( 5, "V"), new RomanValue( 4, "IV"), new RomanValue( 1, "I") }; public static String int2roman(int n) { if (n >= 4000 || n < 1) { throw new NumberFormatException("Numbers must be in range 1-3999"); } StringBuilder result = new StringBuilder(10); //... Start with largest value, and work toward smallest. for (RomanValue equiv : ROMAN_VALUE_TABLE) { //... Remove as many of this value as possible (maybe none). while (n >= equiv.intVal) { n -= equiv.intVal; // Subtract value. result.append(equiv.romVal); // Add roman equivalent. } } return result.toString(); } private static class RomanValue { //... No need to make this fields private because they are // used only in this private value class. int intVal; // Integer value. String romVal; // Equivalent roman numeral. RomanValue(int dec, String rom) { this.intVal = dec; this.romVal = rom; } } }