From ae22e5a8771625978c87553a92365631d5ae5396 Mon Sep 17 00:00:00 2001 From: Ari Ruokamo Date: Wed, 28 Sep 2016 18:46:24 +0300 Subject: [PATCH 1/2] Implemented simple converter from roman to arabic. Works with just simple numbers at the moment, loop not implemented. --- src/RomanNumerals.java | 29 +++++++++++++++++-- tests/TestRomanNumerals.java | 56 ++++++++++++++++++++++++++++++++++-- 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/src/RomanNumerals.java b/src/RomanNumerals.java index 20904f0..6f9e61c 100644 --- a/src/RomanNumerals.java +++ b/src/RomanNumerals.java @@ -1,8 +1,31 @@ public class RomanNumerals { public int convertToInteger(String romanNum) { - // To be Implemented - return 0; - + int result = 0; + if (romanNum.equals("I")) { + result = 1; + } else if (romanNum.equals("V")) { + result = 5; + } else if (romanNum.equals("X")) { + result = 10; + } else if (romanNum.equals("L")) { + result = 50; + } else if (romanNum.equals("C")) { + result = 100; + } else if (romanNum.equals("D")) { + result = 500; + } else if (romanNum.equals("M")) { + result = 1000; + } + return result; + + // Change the above to loop the string char by char to be able to + // calculate longer roman numbers + // +/* for (int i = romanNum.length(); i >= 0; i--) { + char prime = romanNum.charAt(i); + // Not implemented, time is up + } +*/ } } diff --git a/tests/TestRomanNumerals.java b/tests/TestRomanNumerals.java index 5d1de75..51de758 100644 --- a/tests/TestRomanNumerals.java +++ b/tests/TestRomanNumerals.java @@ -4,9 +4,61 @@ public class TestRomanNumerals { + // Test "prime" values @Test - public void test() { - fail("Not yet implemented"); + public void testOnes_one() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("I"); + assertEquals(1, value); } + @Test + public void testFive() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("V"); + assertEquals(5, value); + } + + @Test + public void testTen() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("X"); + assertEquals(10, value); + } + + @Test + public void testFifty() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("L"); + assertEquals(50, value); + } + + @Test + public void testHundred() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("C"); + assertEquals(100, value); + } + + @Test + public void testFiveHundred() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("D"); + assertEquals(500, value); + } + + @Test + public void testThousand() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("M"); + assertEquals(1000, value); + } + + // Test "odd, under and over" + @Test + public void testFour() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("IV"); + assertEquals(4, value); + } } From cc1f05270d55b9a74148f39e7384575cd56860a6 Mon Sep 17 00:00:00 2001 From: arruokam Date: Thu, 6 Oct 2016 15:07:09 +0300 Subject: [PATCH 2/2] Roman numerals converter done, I hope so. --- src/RomanNumerals.java | 53 ++++++++++++++++++++---------------- tests/TestRomanNumerals.java | 42 ++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 24 deletions(-) diff --git a/src/RomanNumerals.java b/src/RomanNumerals.java index 6f9e61c..e709a69 100644 --- a/src/RomanNumerals.java +++ b/src/RomanNumerals.java @@ -1,31 +1,36 @@ public class RomanNumerals { public int convertToInteger(String romanNum) { + int result = 0; - if (romanNum.equals("I")) { - result = 1; - } else if (romanNum.equals("V")) { - result = 5; - } else if (romanNum.equals("X")) { - result = 10; - } else if (romanNum.equals("L")) { - result = 50; - } else if (romanNum.equals("C")) { - result = 100; - } else if (romanNum.equals("D")) { - result = 500; - } else if (romanNum.equals("M")) { - result = 1000; - } - return result; - - // Change the above to loop the string char by char to be able to - // calculate longer roman numbers - // -/* for (int i = romanNum.length(); i >= 0; i--) { - char prime = romanNum.charAt(i); - // Not implemented, time is up + int currentDigit = 0; + int previousDigit = 0; + + for (int i = romanNum.length() - 1; i >= 0; i--) { + char romanDigit = romanNum.charAt(i); + + if (romanDigit == 'I') { + currentDigit = 1; + } else if (romanDigit == 'V') { + currentDigit = 5; + } else if (romanDigit == 'X') { + currentDigit = 10; + } else if (romanDigit == 'L') { + currentDigit = 50; + } else if (romanDigit == 'C') { + currentDigit = 100; + } else if (romanDigit == 'D') { + currentDigit = 500; + } else if (romanDigit == 'M') { + currentDigit = 1000; + } + if (previousDigit > currentDigit) { + result -= currentDigit; + } else { + result += currentDigit; + } + previousDigit = currentDigit; } -*/ + return result; } } diff --git a/tests/TestRomanNumerals.java b/tests/TestRomanNumerals.java index 51de758..1f34c35 100644 --- a/tests/TestRomanNumerals.java +++ b/tests/TestRomanNumerals.java @@ -61,4 +61,46 @@ public void testFour() { int value = rn.convertToInteger("IV"); assertEquals(4, value); } + + @Test + public void testNine() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("IX"); + assertEquals(9, value); + } + + @Test + public void testThree() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("III"); + assertEquals(3, value); + } + + @Test + public void testHundredNine() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("CIX"); + assertEquals(109, value); + } + + @Test + public void testTwoThousandSixteen() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("MMXVI"); + assertEquals(2016, value); + } + + @Test + public void testNineHundredEightyEight() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("DCCCCLXXXVIII"); + assertEquals(988, value); + } + + @Test + public void testNineThousandNineHundredNinetyNine() { + RomanNumerals rn = new RomanNumerals(); + int value = rn.convertToInteger("MMMMMMMMMIM"); + assertEquals(9999, value); + } }