#java #spring #algorithm #spring-boot
#java #spring #алгоритм #spring-boot
Вопрос:
У меня есть интересный вопрос, с которым я столкнулся, допустим, у вас есть таблица в вашей базе данных, которая состоит из: месяц, год, процентная ставка.
У вас есть запись для каждого месяца, и пользователь ограничен возможностью вносить только одну запись за месяц, и вы можете просто обновить существующую запись. Теперь мне нужно получить данные по месяцам и годам, и я указал месяц и год в качестве параметра, и оба значения находятся в int.
Предположим, вы должны получить данные за 6 месяцев, и у вас нет записи за этот месяц, тогда вам нужно вернуть данные за 5 месяцев, и если это также не существует, и так далее.
Я пробовал рекурсию, но это также подпадает под исключение переполнения стека.
Вот пример метода, который я написал, пожалуйста, предложите свой:
private InterestRate getCurrentRateOrLastEntry(int month, int year) {
int givenMonth = month;
if(givenMonth <= 0) {
return null;
}
InterestRate cost = InterestRateRepo.findByMonthAndIsDeletedAndYear(month, false, year);
return (cost == null) ? getCurrentRateOrLastEntry(givenMonth--, year): cost;
}
Пожалуйста, предложите свои мысли, почему это происходит в бесконечном цикле
Ответ №1:
Вы используете postfix для уменьшения givenMonth
при вызове рекурсивного метода. Итак, вы вызываете свой рекурсивный метод getCurrentRateOrLastEntry
с неизменным givenMonth
значением. Условие завершения if(givenMonth <= 0)
никогда не срабатывает. Используйте префикс для уменьшения givenMonth
-> --givenMonth
.
Комментарии:
1. Привет @Arne, я понял, потратив несколько часов, а затем я нашел так много способов сделать это, и вместо рекурсии я использовал цикл while, просто чтобы избежать тяжелой обработки, LOL. Если это поможет читателям, альтернативный подход, которому я следовал, таков:
private InterestRate getCurrentRateOrLastEntry(int month, int year) { InterestRate cost = null; int givenMonth = month; while(cost ==null amp;amp; !(givenMonth <1) amp;amp; !(givenMonth > 12){ cost = find the data from repo givenMonth--; } }