Почему код пропускается для цикла в программе с целой длиной - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь создать программу для определения длины заданного числа.Я подумал, что сделаю это, взяв число и разделив на 10, а затем проверив, было ли число <= 0. Я не хочу редактировать глобальное число, поэтому я создал экземплярную версию числа и использовал ее в качестве условия.в цикле.</p>

Итак, очевидно, что эта работа с dident настолько естественна, что я в итоге заглянул в отладчик, чтобы выяснить, что происходит.Похоже, что программа полностью пропускает цикл for, и любая помощь будет признательна.

public static void sumFirstAndLastDigit(int number) {
        int numberLength = 0;
        int instanceNumber = number;
        for(int i = 0; instanceNumber <= 0; i++) {
            instanceNumber /= 10;
            numberLength = i;   
        }
        System.out.println("Number length = " + numberLength);
        // to find length of number loop division by 10
    }
}

Программа должна использовать цикл for, чтобы делить на 10, пока число не станет равным или меньше, чемноль и сколько раз выполненный цикл должен быть сохранен в целом числе длины числа.В этом случае с номером 12321 ответ должен быть 6, но он печатает 0.

Ответы [ 4 ]

6 голосов
/ 04 июля 2019

Вы говорите это циклу, пока instanceNumber <= 0.«Тест» в цикле for - это тест «продолжай», а не тест завершения.Цикл продолжается до тех пор, пока тест true .

Из вашего описания вы хотите instanceNumber > 0.

Также обратите внимание Точка Авинаша Гупты что с вашим текущим кодом вы будете недооценены на единицу.Я бы решил это, используя совершенно другой цикл:

int numberLength = 0;
int instanceNumber = number;
while (instanceNumber > 0) {
    ++numberLength;
    instanceNumber /= 10;
}

Это хорошо и однозначно: если instanceNumber > 0, он увеличивает numberLength, затем делит на 10 и пытается снова.

2 голосов
/ 04 июля 2019

Это напечатает правильный вывод

public static void sumFirstAndLastDigit(int number) {
    int numberLength = 0;
    int instanceNumber = number;
    for(int i = 0; instanceNumber > 0; i++) {
         instanceNumber /= 10;
         numberLength = i;   
     }
     System.out.println("Number length = " + (numberLength + 1));

    }
0 голосов
/ 04 июля 2019

Рассмотрим еще более сложное решение:

public static void sumFirstAndLastDigit(int number) {
    int numberLength = (int) (Math.log10(number) + 1);
    System.out.println("Number length = " + numberLength);
}

Взято с Baeldung

0 голосов
/ 04 июля 2019

Ваш код будет намного более полным, если вы будете использовать цикл while для своего алгоритма.

public static void sumFirstAndLastDigit(int number) {
    int numberLength = 0;
    int instanceNumber = number;
    while(instanceNumber != 0) {
        instanceNumber /= 10;
        numberLength += 1;
    }
    System.out.println("Number length = " + numberLength);
    // to find length of number loop division by 10
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...