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));
}

Проходит.