Last active
September 13, 2018 10:08
-
-
Save urankajtazaj/6add553041531fde78902c0ab892f295 to your computer and use it in GitHub Desktop.
Roman to Arabic numbers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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