Это не просто вопрос факторинга числа - определение всех факторов числа? Можно тогда решить, нужны ли Вам все комбинации одного или нескольких факторов.
Так, один возможный алгоритм был бы:
factor(N)
divisor = first_prime
list_of_factors = { 1 }
while (N > 1)
while (N % divisor == 0)
add divisor to list_of_factors
N /= divisor
divisor = next_prime
return list_of_factors
тогда ваше дело комбинировать факторы для определения остальной части ответа.
Обычно рекомендуется делегировать функциональность, связанная со временем, в отдельный компонент. Это включает получение текущего времени, а также задержки, такие как Thread.sleep (). Таким образом, можно легко заменить этот компонент на макет во время тестирования, а также переключиться на другую реализацию.
Настройте время ожидания с помощью установщика и укажите значение по умолчанию. Поэтому в своих модульных тестах вызовите установщик с небольшим аргументом (например, 1), а затем выполните метод, который вызовет Thread.sleep ()
.
Другой аналогичный подход - сделать, если настраиваемый через логическое значение, так что Thread.sleep ()
вообще не вызывается, если для логического
установлено значение false
.
Создайте некоторый тип задержки повтора, который представляет политику для задержек повтора. Вызов некоторого метода для типа политики для задержки. Смейтесь как хотите. Нет условной логики или истина
/ ложь
флаги. Просто введите нужный тип.
В ConnectRetryPolicy.java
public interface ConnectRetryPolicy {
void doRetryDelay();
}
В SleepConnectRetryPolicy.java
public class final SleepConnectRetryPolicy implements ConnectRetryPolicy {
private final int delay;
public SleepConnectRetryPolicy(final int delay) {
this.delay = delay;
}
@Override
public void doRetryDelay() {
try {
Thread.sleep(delay);
} catch (InterruptedException ie) {
log.error("connection delay sleep interrupted", ie);
}
}
}
В MockConnectRetryPolicy.java
public final class MockConnectRetryPolicy implements ConnectRetryPolicy {
@Override
public void doRetryDelay() {
// no delay
}
}