Найти все счастливые числа, пока

Мое задание - распечатать все счастливые числа от 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);//<---?????

Возможный дубликат Как выйти из цикла while в Java?

Tim 06.04.2018 16:27

Просто в сторону: вы уверены, что должны явно проверять наличие num2 < 1883? Присвоение читается так, как будто вам может потребоваться сравнить выведенные вами числа.

Cecilya 06.04.2018 16:30

Я не думаю, что ты делаешь

Tim 06.04.2018 16:30

Разве ваша петля в настоящее время не останавливается, когда num2 достигает 1883 года? На самом деле, я бы подумал, что у вас есть счетчик последнего стейка из последовательных счастливых чисел, и вы выходите, когда это количество достигнет 3. В настоящее время он написан с предположением ответа.

lurker 06.04.2018 16:31

Я имею в виду, что знаю, как выйти из петель. но в этом задании мне нужно выйти, когда 3 последних «суммы» были последовательными числами. и я не знаю, как я могу сравнить последнюю "сумму" с двумя "суммами" перед

idopinhas 06.04.2018 16:35
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
163
2

Ответы 2

У вас должен быть список, содержащий последовательные найденные числа. И повторяйте цикл до тех пор, пока длина этого списка не станет 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? Универсальные примитивы поддерживаются только через проект Валгалла.

Turing85 06.04.2018 16:40

Общий формат:

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 гарантирует, что во время следующей итерации будет сохранено последнее счастливое число, что позволит выполнить вычисление суммы.

Другие вопросы по теме