📖 Scenario: You are building a simple tool to convert Roman numerals into their integer values. Roman numerals are used in clocks, book chapters, and movie titles. Understanding how to convert them helps in many real-life situations.
🎯 Goal: Build a Java program that converts a Roman numeral string into its integer value using a dictionary (map) and a loop.
📋 What You'll Learn
Create a map with Roman numeral characters and their integer values
Create a variable to hold the total integer value
Use a for loop to process the Roman numeral string from left to right
Apply the Roman numeral rules to add or subtract values correctly
Print the final integer value
💡 Why This Matters
🌍 Real World
Roman numerals are used in clocks, book chapters, movie titles, and historical dates. Converting them to integers helps in calculations and comparisons.
💼 Career
Understanding how to map characters to values and apply rules in loops is a key skill in programming, useful in parsing, data processing, and algorithm design.
Progress0 / 4 steps
1
Create the Roman numeral map
Create a HashMap<Character, Integer> called romanMap with these exact entries: 'I' -> 1, 'V' -> 5, 'X' -> 10, 'L' -> 50, 'C' -> 100, 'D' -> 500, 'M' -> 1000.
DSA Java
Hint
Use HashMap<Character, Integer> and put method to add entries.
2
Set up the input Roman numeral and total variable
Create a String variable called roman and set it to "MCMXCIV". Create an int variable called total and set it to 0.
DSA Java
Hint
Set roman to the exact string "MCMXCIV" and total to 0.
3
Convert Roman numeral to integer
Use a for loop with int i = 0 to i < roman.length() - 1 to iterate over roman. Inside the loop, get the current value with romanMap.get(roman.charAt(i)) and the next value with romanMap.get(roman.charAt(i + 1)). If the current value is less than the next value, subtract the current value from total. Otherwise, add the current value to total. After the loop, add the value of the last character to total.
DSA Java
Hint
Use a loop from 0 to length - 1. Compare current and next values to decide add or subtract.
4
Print the integer result
Print the value of total using System.out.println(total);.
DSA Java
Hint
Use System.out.println(total); to show the result.
Practice
(1/5)
1. What is the value of the Roman numeral IX when converted to an integer?
easy
A. 6
B. 11
C. 9
D. 19
Solution
Step 1: Understand Roman numeral rules for subtraction
In Roman numerals, when a smaller numeral appears before a larger one, it is subtracted. Here, I (1) is before X (10), so 1 is subtracted from 10.
Step 2: Calculate the integer value
10 - 1 = 9.
Final Answer:
9 -> Option C
Quick Check:
IX = 9 [OK]
Hint: Subtract when smaller numeral precedes larger one [OK]
Common Mistakes:
Adding values instead of subtracting
Confusing IX with XI
Ignoring subtraction rule
2. Which of the following Java code snippets correctly initializes a map for Roman numeral values?
easy
A. Map map = new HashMap<>(); map.add('I', 1); map.add('V', 5);
B. Map map = Map.of("I", 1, "V", 5, "X", 10);
C. Map map = new Map(); map['I'] = 1; map['V'] = 5;
D. Map map = new HashMap<>(); map.put('I', 1); map.put('V', 5); map.put('X', 10);
Solution
Step 1: Check correct Map initialization syntax in Java
Java requires using a concrete class like HashMap to create a Map instance. Then, use put() method to add key-value pairs.
Step 2: Verify each option
Map map = new HashMap<>(); map.put('I', 1); map.put('V', 5); map.put('X', 10); correctly uses new HashMap<>(), then map.put() calls. B uses Map.of with string keys ("I", etc.) causing type mismatch for Map<Character, Integer>. Options C and D use invalid syntax.
Final Answer:
Map map = new HashMap<>(); map.put('I', 1); map.put('V', 5); map.put('X', 10); -> Option D
Quick Check:
Use HashMap and put() for map initialization [OK]
Hint: Use HashMap and put() to add entries [OK]
Common Mistakes:
Using invalid Map constructor
Using map.add() instead of map.put()
Trying to assign values with brackets
3. What is the output of the following Java code snippet?
String s = "MCMXCIV";
int result = 0;
Map map = Map.of('I',1,'V',5,'X',10,'L',50,'C',100,'D',500,'M',1000);
for (int i = 0; i < s.length(); i++) {
int value = map.get(s.charAt(i));
if (i + 1 < s.length() && value < map.get(s.charAt(i + 1))) {
result -= value;
} else {
result += value;
}
}
System.out.println(result);
medium
A. 1904
B. 1994
C. 1094
D. 1949
Solution
Step 1: Understand the Roman numeral string and map values
The string "MCMXCIV" represents a Roman numeral. Map assigns values: M=1000, C=100, X=10, I=1, V=5.
Step 2: Trace the loop and calculate result
Loop through each character: - M(1000), next C(100): 1000 > 100, add 1000 - C(100), next M(1000): 100 < 1000, subtract 100 - M(1000), next X(10): 1000 > 10, add 1000 - X(10), next C(100): 10 < 100, subtract 10 - C(100), next I(1): 100 > 1, add 100 - I(1), next V(5): 1 < 5, subtract 1 - V(5), no next, add 5 Sum = 1000 - 100 + 1000 - 10 + 100 - 1 + 5 = 1994.
Final Answer:
1994 -> Option B
Quick Check:
MCMXCIV = 1994 [OK]
Hint: Subtract if current < next, else add [OK]
Common Mistakes:
Adding all values without subtraction
Incorrectly subtracting when not needed
Misreading character order
4. The following Java method aims to convert a Roman numeral string to an integer but has a bug. What is the bug?
public int romanToInt(String s) {
Map map = Map.of('I',1,'V',5,'X',10,'L',50,'C',100,'D',500,'M',1000);
int result = 0;
for (int i = 0; i < s.length(); i++) {
int value = map.get(s.charAt(i));
if (i + 1 < s.length() && value > map.get(s.charAt(i + 1))) {
result -= value;
} else {
result += value;
}
}
return result;
}
medium
A. The comparison operator should be '<' instead of '>' in the if condition.
B. The map initialization is incorrect and causes runtime error.
C. The loop should start from 1 instead of 0.
D. The method does not handle lowercase Roman numerals.
Solution
Step 1: Analyze the if condition logic
The code subtracts value when current value is greater than next. But Roman numerals subtract when current is less than next.
Step 2: Identify the correct comparison operator
The condition should be value < map.get(next char) to subtract, not value > next value.
Final Answer:
The comparison operator should be '<' instead of '>' in the if condition. -> Option A
Quick Check:
Subtract when current < next [OK]
Hint: Subtract if current numeral is smaller than next [OK]
Common Mistakes:
Using wrong comparison operator
Ignoring subtraction rule
Assuming map initialization error
5. You want to convert a list of Roman numerals ["XL", "IX", "MMXX"] to their integer values using Java. Which approach correctly handles this with minimal code duplication?
hard
A. Write a separate method to convert one Roman numeral to integer, then loop over the list calling this method for each element.
B. Manually convert each Roman numeral in the list with separate code blocks for each string.
C. Use a single loop over the list and convert each character individually without a helper method.
D. Convert only the first Roman numeral and reuse the result for all elements.
Solution
Step 1: Identify the need for reusable code
Converting Roman numerals requires the same logic for each string. Writing a helper method avoids repeating code.
Step 2: Use a loop to process the list
Loop through the list and call the helper method for each Roman numeral string to get its integer value.
Final Answer:
Write a separate method to convert one Roman numeral to integer, then loop over the list calling this method for each element. -> Option A
Quick Check:
Use helper method + loop for clean code [OK]
Hint: Use helper method and loop to avoid repetition [OK]
Common Mistakes:
Repeating conversion code for each string
Ignoring code reuse principles
Using incorrect logic for all elements
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.