Бывают трудности "разбить" задачу. Как этому научиться?

Сейчас изучаю Java и чувствую, что бывают трудности "разбить" задачу. Один из примеров: есть калькулятор, который принимает на вход цифры, есть switch, который использует данные (цифры) и проводит мат. операции, и есть цикл, который вызывает команду "Повторить команду", но куда вставить цикл у меня нет идеи. Поспрашивал у знакомых, а они советуют, что нужно развивать логическое мышление. Что делать?

Ну да, вот именно развивать логическое мышление, только с акцентом на программировании. Вообще, всё программирование, и проектирование — про декомпозицию прежде всего, про умение разбивать задачу на множество слабо связанных подзадач.

Подходов тут много, я сторонник классического академического подхода, можно через алгоритмы -- изучайте учебники Кнута, Вирта, Лафорэ, "Грокаем алгоритмы", принцип "разделяй и властвуй" в частности.

Но если не получается на совсем низком уровне кода, непонятно как "скомбинировать" простые команды чтобы получить правильный результат, это верный признак, что вы пока не выработали уверенный универсальный навык кодирования, а это вообще ключевое в профессии программиста. Такой навык достигается например решением достаточно большого числа (200-300) задачек постепенно растущей сложности.