annotate java-genomics-toolkit/src/edu/unc/utils/RomanNumeral.java @ 0:1daf3026d231

Upload alpha version
author timpalpant
date Mon, 13 Feb 2012 21:55:55 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
1 package edu.unc.utils;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
2
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
3 // Rudimentary Class for doing Arabic Integer -> Roman Numeral conversion
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
4 // Adapted by Timothy Palpant
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
5 // File : gui/componenents/calculators/Roman.java
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
6 // Description: A static method for converting binary integers to Roman numbers.
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
7 // Illustrates: Static inner value class, StringBuffer, throw exceptions.
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
8 // Author : Fred Swartz - 2006-12-29 - Placed in public domain.
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
9 public class RomanNumeral {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
10
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
11 // This could be alternatively be done with parallel arrays.
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
12 // Another alternative would be Pair<Integer, String>
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
13 final static RomanValue[] ROMAN_VALUE_TABLE = {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
14 new RomanValue(1000, "M"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
15 new RomanValue( 900, "CM"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
16 new RomanValue( 500, "D"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
17 new RomanValue( 400, "CD"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
18 new RomanValue( 100, "C"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
19 new RomanValue( 90, "XC"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
20 new RomanValue( 50, "L"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
21 new RomanValue( 40, "XL"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
22 new RomanValue( 10, "X"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
23 new RomanValue( 9, "IX"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
24 new RomanValue( 5, "V"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
25 new RomanValue( 4, "IV"),
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
26 new RomanValue( 1, "I")
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
27 };
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
28
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
29 public static String int2roman(int n) {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
30 if (n >= 4000 || n < 1) {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
31 throw new NumberFormatException("Numbers must be in range 1-3999");
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
32 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
33 StringBuilder result = new StringBuilder(10);
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
34
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
35 //... Start with largest value, and work toward smallest.
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
36 for (RomanValue equiv : ROMAN_VALUE_TABLE) {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
37 //... Remove as many of this value as possible (maybe none).
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
38 while (n >= equiv.intVal) {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
39 n -= equiv.intVal; // Subtract value.
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
40 result.append(equiv.romVal); // Add roman equivalent.
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
41 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
42 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
43 return result.toString();
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
44 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
45
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
46 private static class RomanValue {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
47 //... No need to make this fields private because they are
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
48 // used only in this private value class.
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
49 int intVal; // Integer value.
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
50 String romVal; // Equivalent roman numeral.
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
51
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
52 RomanValue(int dec, String rom) {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
53 this.intVal = dec;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
54 this.romVal = rom;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
55 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
56 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
57 }