Exercise 1: Roman Numerals
This is a simple bit of code that takes the numbers 1 through 100 and converts them to Roman Numerals and print them to the console. It will also compare those Roman Numerals to a test list and print out a "Passed" or "Failed" depending on if the generated Roman Numerals match the list. (Code based loosely off of the stack overflow answer here.)import java.util.List; import java.util.TreeMap; import static java.util.Arrays.asList; public class JavaExample1 { // This can only be used to test your results. private static List<String> testList = asList( "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX", "XXI", "XXII", "XXIII", "XXIV", "XXV", "XXVI", "XXVII", "XXVIII", "XXIX", "XXX", "XXXI", "XXXII", "XXXIII", "XXXIV", "XXXV", "XXXVI", "XXXVII", "XXXVIII", "XXXIX", "XL", "XLI", "XLII", "XLIII", "XLIV", "XLV", "XLVI", "XLVII", "XLVIII", "XLIX", "L", "LI", "LII", "LIII", "LIV", "LV", "LVI", "LVII", "LVIII", "LIX", "LX", "LXI", "LXII", "LXIII", "LXIV", "LXV", "LXVI", "LXVII", "LXVIII", "LXIX", "LXX", "LXXI", "LXXII", "LXXIII", "LXXIV", "LXXV", "LXXVI", "LXXVII", "LXXVIII", "LXXIX", "LXXX", "LXXXI", "LXXXII", "LXXXIII", "LXXXIV", "LXXXV", "LXXXVI", "LXXXVII", "LXXXVIII", "LXXXIX", "XC", "XCI", "XCII", "XCIII", "XCIV", "XCV", "XCVI", "XCVII", "XCVIII", "XCIX", "C"); private static TreeMap<Integer, String> romanNumeralMap = new TreeMap<>(); static { romanNumeralMap.put(1, "I"); romanNumeralMap.put(4, "IV"); romanNumeralMap.put(5, "V"); romanNumeralMap.put(9, "IX"); romanNumeralMap.put(10, "X"); romanNumeralMap.put(40, "XL"); romanNumeralMap.put(50, "L"); romanNumeralMap.put(90, "XC"); romanNumeralMap.put(100, "C"); } public static void main(String[] args) { boolean passed = true; for (int i = 1; i <= 100; i++) { String romanNumeral = toRomanNumeral(i); System.out.println(romanNumeral); passed &= romanNumeral.equals(testList.get(i-1)); } System.out.println(passed ? "Passed" : "Failed"); } private static String toRomanNumeral(int num) { int floorKey = romanNumeralMap.floorKey(num); if (num == floorKey) { return romanNumeralMap.get(num); } return romanNumeralMap.get(floorKey) + toRomanNumeral(num - floorKey); } }
Exercise 2: SQL Query String
This exercise simply has a basic pgSQL query in a string that pulls in the table name from a constant. Can you rework it to use a Kotlin multiline String?public class JavaExample2 { private static final String TABLE_NAME = "blog_posts"; public static void main(String[] args) { String query = "SELECT id, data \n" + "FROM " + TABLE_NAME + " \n" + "WHERE data->>'userId' = ?"; System.out.println(query); } }Answers will be put out in a follow up blog post.
And here are the answers: Kotlin in Action: Answers to Chapter 3 Exercises