Делайте пока циклы в сравнении с циклами в Java для подсчета - PullRequest
0 голосов
/ 09 октября 2018

Когда дело доходит до подсчета, следует ли использовать цикл do-while или цикл for?Потому что это:

class Main {
  public static void main(String[] args) {
    int times = 1;
    do {
      System.out.println("I have printed " + times + " times.");
      times++;
    } while (times < 6);
  }
}

Кажется, делает то же самое, что и это:

class Main {
  public static void main(String[] args) {
    for (int times = 1; times < 6; times++) {
      System.out.println("I have printed " + times + " times.");
    }
  }
}

Разница в скорости?Предпочтение?Ситуация?Личные причуды?Какое-то "Java социальное табу"?Я понятия не имею.Похоже, что любой из них может быть использован для эффективного подсчета, просто требуется гораздо больше.И оба печатают точно то же самое.

System.out.println("Many thanks!!");

Ответы [ 6 ]

0 голосов
/ 15 октября 2018

Последние версии Java также допускают следующее

    IntStream.range(0, 6).forEach(
            i -> System.out.println("I have printed " + i + " times.")
    );

Помимо личных предпочтений, у этого есть то преимущество, что индекс поддерживается средой выполнения, и программисту не нужно ++i

0 голосов
/ 10 октября 2018

По соглашению большинство разработчиков Java используют циклы.Эффективная Java рекомендует использовать циклы вместо циклов while, поскольку переменная цикла может использовать более узкую область действия, что уменьшает количество ошибок.http://www.corejavaguru.com/effective-java/items/45

0 голосов
/ 10 октября 2018

Я думаю, что это скорее читабельность и синтаксический сахар.Хотя условие

while (condition)

также можно записать как

for (; condition; )

, но, очевидно, первое выглядит намного лучше и более читабельно.

0 голосов
/ 10 октября 2018

Это зависит от выбора программиста, когда использовать цикл или делать цикл, но большинство программистов придерживаются

  • Для циклаКогда вы знаете, что цикл будет выполняться заранее определенное количество раз (общая практика, поскольку вы также можете использовать for(;true;), который зацикливается вечно).Например, цикл, который выполняется 10 или n раз, где n - это переменная

for(int i = 0; i < n; i++) {
    //Do something
}
  • Пока циклКогда вы знаете, что цикл должен завершиться после оценки определенного условия как истинного, иначе вы хотите, чтобы цикл работал вечно (как while (true)), и проверяли условия прерывания внутри цикла while.Также цикл while предпочтителен, когда вы не можете сначала выяснить условия и начать с while (true), но как только вы напишите код внутри цикла, вы получите хорошее понимание того, что происходит, и получите представление о том, какие условия проверятьТаким образом, когда выйти из цикла.Например

while(x != 0) {
    //Do something;
    x--;
}

while(true) {
    // some code to execute on which the condition depends
    if(condition is true) {
        break;
    }
}
  • Do while loopЦикл do while похож на цикл while, но с небольшой разницей.То есть он позволяет выполнить первую итерацию без проверки условия (указанного в операторе while, но вы все равно можете оценить условие внутри блока (фигурные скобки)).
0 голосов
/ 09 октября 2018

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

Как сказал @ Bill-The-Lizard, цикл while подсказывает читателю вашего кода, что вы выбрали его, потому что вы не считаете, а повторяете, пока не будет выполнено условие.Хотя бы один раз - иначе вы бы выбрали while(...){ } цикл.

Другими словами, for, do {} while() и while() { } обычно работают одинаково.Но вам лучше передать свои намерения в вашем конкретном кусочке логики.

0 голосов
/ 09 октября 2018

Вы правы, они делают одно и то же (за исключением того, что один начинает считать с 0, а другой с 1, но это только детали реализации).Если ваша программа заранее знает (до запуска цикла), сколько раз вы хотите, чтобы цикл повторялся, большинство разработчиков Java скажут вам пойти с циклом for.Вот для чего он предназначен.

Цикл while или цикл do while лучше подходят для ситуаций, когда вы ищете определенное значение или условие перед выходом из цикла.(Что-то вроде count >= 10 или userInput.equals("N"). Все, что оценивается как логическое значение True / False.)

...