Переместите вычисление calcNum в цикл do-while и добавьте дополнительное условие:
private void populateRandomPrimes()
{
onePrimeValue = RandomPrime.getValue();
BigInteger calcNum = null;
do {
secondPrimeValue= RandomPrime.getValue();
calcNum = new BigInteger(Integer.toString(onePrimeValue*secondPrimeValue));
} while(onePrimeValue.equals(secondPrimeValue) && !(calcNum.isProbablePrime(20));
//if you get here, calcNum isProbPrime, so no need to check again
try {
populateMultiplicativeForPlayer();
} catch (Exception ex) {
ex.printStackTrace();
}
}
Вы столкнулись с этой проблемой, потому что у вас нет точного базового случая для вашей рекурсии. Кроме того, не используйте ==
для объектов, если вы не знаете, что делаете. Ваше условие выполнения должно было использовать .equals()
для сравнения onePrimeValue
и secondPimeValue
В этом случае наихудший сценарий состоит в том, что ваша программа застрянет в бесконечном цикле , поскольку условие выхода из цикла do-while никогда не выполняется. Чтобы исправить это, вы можете добавить третье условие в цикл, чтобы убедиться, что оно завершается после фиксированного числа итераций.