Java — интересный язык, и мне нравится его изучать. Это намного сложнее, чем предыдущие языки, которые я использовал, но оно того стоит, поскольку в Java гораздо больше возможностей. Я начинаю делать успехи в Java, и это становится привычкой нажимать правильные клавиши в режиме vim.
Я не просто изучаю Java, я учусь внедрять TDD (Test Driven Development) в свою работу. В чем я сначала не был уверен, но теперь я начинаю понимать это все больше и больше, что помогло мне понять, почему он используется и массовые преимущества. Сегодня мой Java-проект заключался в создании лучшего разменного автомата Kata на Java.
Я начал медленно, убедившись, что простые тесты пройдены, и продолжил. Через некоторое время я оказался в ситуации, когда у меня был отдельный цикл while для каждого типа монеты. Который работал нормально, и тесты прошли, но я увидел закономерность. Что затем заставило меня объединить все это в один цикл while. Для этого я создал массив всех доступных монет и поместил цикл while в цикл for, который проходил через этот массив. А затем сделал соответствующие вычисления, но вместо этого использовал неустойчивое значение, такое как 1, 2, 5, 10, 20, 50; Я использовал значение из таблицы массивов следующим образом:
public static String coinChange(int pennies) { int[] coins = {50, 20, 10, 5, 2, 1}; String result = ""; for (int i=0; i < coins.length; i++) { while (pennies >= coins[i]) { pennies -= coins[i]; result += coins[i]; } } }
Что затем привело меня к другой проблеме, я не добавил запятую к конечному результату. Итак, я составил список и вместо того, чтобы добавлять к результату (переменной), я сделал список и использовал list.add(), чтобы добавить в него монеты. Затем я сделал функцию formatCoins, целью которой было добавить запятые для разделения разных монет. Вот так:
public static String formatCoins(List coins) { return coins.toString().replace("[", "").replace("]", ""); }
Теперь этот тест:
public void testForSixty() { CoinChanger converter = new CoinChanger(); assertEquals("50, 10", converter.coinChange(60)); }
Проходит.