Пропустить итерацию в цикле while java

Я только начинаю программировать и только на прошлой неделе начал изучать java в нашей школе. Я пытаюсь пропустить итерацию, используя оператор continue в цикле while в java, и, к сожалению, результат не такой, как я ожидал ...

Это мой код:

// Using while Loop
int counter = 1;

while(counter <= 5){
    if (counter == 3){
        continue;
    }
    System.out.println(counter);
    counter++;
}

Результат: 1 2 и он не печатает 4 и 5, но я заметил, что программа все еще не завершена.

Я даже пробовал кодировать это так:

int counter = 1;    

while(counter <= 5){
    System.out.println(counter);
    if (counter == 3){
        continue;
    }
    counter++;
}

Он просто печатает 3 без остановки

int counter= 1;    

while(counter <= 5){
    counter++;
    if (counter == 3){
        continue;
    }
    System.out.println(counter);
}

этот печатает 2 4 5 6 вместо 1 2 4 5

Я использовал для этого цикл, и он хорошо работает

это мой код:

//using for loop
for(int counter = 1; counter <= 5; counter++){
     if (counter == 3){
          continue;
     }
     System.out.println(counter);
}

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

Теперь, может ли кто-нибудь сказать мне, в чем моя ошибка при использовании цикла while при выполнении этого упражнения? Спасибо...

Если вы там continue, он не попадает в counter++

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

Ответы 3

if (counter == 3){
    continue;
}
System.out.println(counter);
counter++;

Здесь оператор continue пропускает оператор ctr++;, поэтому это всегда 3, и цикл while никогда не завершается.

int counter = 1;    

while(counter <= 5){
    System.out.println(counter);
    if (counter == 3){
        continue;
    }
    counter++;
}

Здесь будет достигнут оператор печати, как и до состояния continue, но counter++; все равно будет передан, что приведет к бесконечному циклу печати 3.

int counter= 1;    

while(counter <= 5){
    counter++;
    if (counter == 3){
        continue;
    }
    System.out.println(counter);
}

Здесь достигнут counter++, но он будет увеличен до println(), поэтому он распечатает один плюс желаемые значения.

так что я могу сделать, чтобы это исправить?

robert 25.09.2018 00:45

@robert Почему бы не использовать цикл for, который автоматически увеличивает i?

GBlodgett 25.09.2018 00:46

Я уже сделал это правильно в цикле for. На самом деле настоящая причина, по которой я делаю это упражнение, - это попытка создать программу, которая будет определять, является ли число простым или составным. Я сделал это правильно в цикле for, но мой учитель сказал, что это правильно, но это не самый простой метод .. Вот мой код: for (int ctr = 1; ctr <= n; ctr ++) {if (n% ctr == 0) {r ++; }} Он намекнул, что проще всего использовать continue в цикле while, поэтому я использовал if (num% ctr! = 0) {continue; } Это было явно неправильно ..

robert 25.09.2018 00:52

Просто добавьте counter ++ перед оператором continue, и код вашего цикла while будет работать так же, как и цикл for.

Armando Perez 25.09.2018 00:54

@robert Это, чтобы узнать, сколько делителей у данного числа?

GBlodgett 25.09.2018 01:06

@GBlodgett, теперь все в порядке, я уже решил эту задачу в цикле while. Я пробовал это как ступеньку в цикле while, потому что я просто хочу проверить, как работает оператор continue в цикле while, думаю, я понял, как делать то, что хочет мой учитель ...

robert 25.09.2018 01:13

Кстати, в первом ответе @GBlodgett вы знаете, почему ваша программа не показывает ожидаемый результат. Так можно добиться своего результата.

// Использование цикла while

int counter = 0;

while(counter < 5){
    counter++;
    if (counter == 3){
        continue;
    }


    System.out.println(counter);

    }

то, что я пытаюсь сделать, это пропустить число 3 и напечатать 1 2 4 5. Если я использую break, он просто напечатает 1 2 3

robert 25.09.2018 00:49

Проверьте еще раз, пожалуйста.

Shahid 25.09.2018 00:55

Пожалуйста, подумайте о редактировании вашего ответа, потому что ваше текстовое объяснение не соответствует вашему коду.

Armando Perez 25.09.2018 01:15

В любое время приятель :).

Armando Perez 25.09.2018 04:38

Проблема в том, что как только counter == 3, он всегда будет попадать в оператор if как истинный и больше никогда не будет увеличивать счетчик. Итак, ваш цикл while напечатает 1 2, а затем будет выполняться бесконечно.

Чтобы решить эту проблему, запишите ее так:

// Using while Loop
int counter = 1;

while(counter <= 5){
    if (counter == 3){
        counter++;
        continue;
    }
    System.out.println(counter);
    counter++;
}

Просто добавьте counter ++ перед оператором continue. Надеюсь это поможет.

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