Мое задание - распечатать все счастливые числа от 10 до тех пор, пока программа не напечатает 3 последовательных номера. Эти 3 числа должны быть 1880 1881 и 1882. я написал while (num2 <1883) только для остановки цикла. я должен сравнить 3 последние «суммы» и остановить цикл, когда они идут подряд.
do {
num = num2;
while (num > 0 || sum > 9) {
if (num == 0) {
num = sum;
sum = 0;
}
sum += Math.pow(num % 10, 2);
num /= 10;
}
if (sum == 1) {
counter++;
System.out.println(counter + ") " + num2 + " is a happy number :-)");
}
num2++;
sum = 0;
} while (num2 < 1883);//<---?????
Просто в сторону: вы уверены, что должны явно проверять наличие num2 < 1883? Присвоение читается так, как будто вам может потребоваться сравнить выведенные вами числа.
Я не думаю, что ты делаешь
Разве ваша петля в настоящее время не останавливается, когда num2 достигает 1883 года? На самом деле, я бы подумал, что у вас есть счетчик последнего стейка из последовательных счастливых чисел, и вы выходите, когда это количество достигнет 3. В настоящее время он написан с предположением ответа.
Я имею в виду, что знаю, как выйти из петель. но в этом задании мне нужно выйти, когда 3 последних «суммы» были последовательными числами. и я не знаю, как я могу сравнить последнюю "сумму" с двумя "суммами" перед




У вас должен быть список, содержащий последовательные найденные числа. И повторяйте цикл до тех пор, пока длина этого списка не станет 3. Внутри цикла проверьте, является ли ваш кандидат счастливым числом. Если он есть, добавьте его в список. Если список не очищен, так как вы не достигли последовательного счастливого числа. После выхода из цикла Список содержит три последовательных найденных счастливых числа.
List<Integer> foundNumbers = new ArrayList<Integer>();
int candidate = 10;
while(foundNumbers.length < 3) {
if (isHappyNumber(candidate)) {
foundNumbers.add(candidate);
System.out.println(candidate + " is a happy number");
} else {
foundNumbers.clear();
}
candidate ++;
}
//Print the list members
"List<int> foundNumbers = new ArrayList<int>();" - Вы используете какой-нибудь экспериментальный JDK? Универсальные примитивы поддерживаются только через проект Валгалла.
Общий формат:
int lastHappyNumber = 0;
int currentHappyNumber = 0;
int thirdLastSum = 0;
int secondLastSum = 0;
int firstLastSum = 0;
do {
currentHappyNumber = getNextHappyNumber(); // <--- fill in with your logic
thirdLastSum = secondLastSum;
secondLastSum = firstLastSum;
firstLastSum = lastHappyNumber + currentHappyNumber;
lastHappyNumber = currentHappyNumber;
}
while ((thirdLastSum + 1) == secondLastSum && (secondLastSum + 1) == firstLastSum);
Поскольку это задание, я оставлю вычисление счастливых чисел вам, но идея состоит в том, что на каждой итерации вы сдвигаете последние 3 суммы вниз, а затем сравниваете их. Как только вы найдете правильное решение (где последние три суммы были последовательными целыми числами), значение lastHappyNumber содержит счастливое число, которое решает проблему. lastHappyNumber = currentHappyNumber гарантирует, что во время следующей итерации будет сохранено последнее счастливое число, что позволит выполнить вычисление суммы.
Возможный дубликат Как выйти из цикла while в Java?