Skip to content

Instantly share code, notes, and snippets.

@urankajtazaj
Last active September 13, 2018 10:08
Show Gist options
  • Save urankajtazaj/6add553041531fde78902c0ab892f295 to your computer and use it in GitHub Desktop.
Save urankajtazaj/6add553041531fde78902c0ab892f295 to your computer and use it in GitHub Desktop.
Roman to Arabic numbers
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
class RomanToDecimal {
private static Scanner input = new Scanner(System.in);
private static List<Character> romanChars = new LinkedList<>();
private static Map<Character, Integer> romanCharsVals = new HashMap<>();
public static void main(String[] args) {
addValues();
System.out.print("\nInsert a roman number: ");
try {
String in = input.nextLine().trim().toUpperCase();
int decimal = convertToDecimal(in);
System.out.println(in + " in decimal is " + decimal);
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
// Converts from Roman to Arabic numbers
private static int convertToDecimal(String roman) throws Exception {
int result = 0;
int currentTotal = 0;
if (roman.length() == 0) {
throw new Exception("Input is empty");
}
for (int i = 0; i < roman.length(); i++) {
if (!romanChars.contains(roman.charAt(i))) {
throw new Exception("Invalid character entered");
}
if (i < roman.length() - 1) {
if (romanChars.indexOf(roman.charAt(i)) < romanChars.indexOf(roman.charAt(i + 1))) {
currentTotal += romanCharsVals.get(roman.charAt(i + 1)) - romanCharsVals.get(roman.charAt(i));
i++;
} else {
currentTotal += romanCharsVals.get(roman.charAt(i));
}
} else {
currentTotal += romanCharsVals.get(roman.charAt(i));
}
result += currentTotal;
currentTotal = 0;
}
return result;
}
// Adds values to list and map
private static void addValues() {
romanChars.add('I');
romanChars.add('V');
romanChars.add('X');
romanChars.add('L');
romanChars.add('C');
romanChars.add('D');
romanChars.add('M');
romanCharsVals.put(romanChars.get(0), 1);
romanCharsVals.put(romanChars.get(1), 5);
romanCharsVals.put(romanChars.get(2), 10);
romanCharsVals.put(romanChars.get(3), 50);
romanCharsVals.put(romanChars.get(4), 100);
romanCharsVals.put(romanChars.get(5), 500);
romanCharsVals.put(romanChars.get(6), 1000);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment