Начните с изучения навыка гуглежа. Например java roadmap.
Но нет такой професси - "знающий джаву". Она используется много где, и в каждой сфере куча сопутствующих технологий
Я вот нифига не знаю как там в джаве устроены потоки ввода-вывода, но ОЧЕНЬ ПОХОЖЕ, что в BufferedReader ваш попадает результат System.out.println.
Для очень быстрой проверки замените
System.out.println(Arrays.toString(filename.split(".part")));
на что то вроде
System.out.println("WTF");
и посмотрите что будет в массиве
Отладку в зубы и дебажить.
Передаете в фактор 0. Срабатывает if. Дальше он вызывает factor с -1. И так до stack overflow.
У факториала нуля обычно своя обработка ;-)
Если вы изучаете - то написанный кем то код вам будет только во вред.
Напишите сами, напишите алгоритм, и т.д. А тут если что подскажут.
Но писать код тому кто УЧИТСЯ - медвежья услуга
ВОзможно. Но не напрямую.
В целом т.к. у вас три метода всего - то тут банальным switch-case подойдет. В более сложных случаях - массив методов (если такого нет в Java - массив инстансов классов-генераторов с общей базой).
В выборе инструмента (любого) надо руководствоваться сначала двумя критериями:
- насколько инструмент подходит для задачи и под требования
- насколько исполнитель хорошо владеет инструментом
Ни на первый, ни на второй вопрос никто со стороны вам не ответит. Так что решать вам.