Меню

Как вывести счетчик итераций цикла java



Есть ли способ получить доступ к счетчику итераций в цикле Java for-each?

есть ли способ в Java для каждого цикла

чтобы выяснить, как часто цикл уже был обработан?

Помимо использования старого и хорошо известного for(int i=0; i — loop, является конструктом

единственный способ иметь такой счетчик, доступный в цикле for-each?

14 ответов

нет, но вы можете предоставить свой собственный счетчик.

причина этого в том, что цикл for-each внутренне не есть счетчик; он основан на типа Iterable интерфейс, т. е. он использует Iterator перебирать «коллекцию», которая может вообще не быть коллекцией, и на самом деле может быть чем — то совсем не основанным на индексах (например, связанный список).

есть другой способ.

учитывая, что вы пишете свой собственный Index класс и статический метод, который возвращает Iterable над экземплярами этого класса вы можете

внедрение With.index что-то вроде

самое простое решение is просто запустить свой собственный счетчик таким образом:

причина этого в том, что нет фактической гарантии, что элементы в коллекции (который этот вариант for перебирает) даже есть индекс, или даже определен порядок (некоторые коллекции могут изменить порядок при добавлении или удалении элементов).

см., например, следующий код:

при запуске, что, вы можете увидеть что-то вроде:

указывая, что, правильно, порядок не считается заметной особенностью набора.

есть и другие способы сделать это без Ручной счетчик, но это справедливая работа для сомнительной выгоды.

используя лямбда и функциональные интерфейсы на Java 8 делает возможным создание новых абстракций цикла. Я могу перебирать коллекцию с индексом и размером коллекции:

, который я реализовал так:

возможности безграничны. Например, я создаю абстракцию, которая использует специальную функцию только для первого элемент:

, который печатает список, разделенный запятыми, правильно:

, который я реализовал так:

библиотеки начнут появляться, чтобы делать такие вещи, или вы можете свернуть свой собственный.

боюсь, это невозможно с foreach . Но я могу предложить вам простой старый стиль для-loops:

заметил, что список интерфейс дает вам доступ к it.nextIndex() .

(редактировать)

к вашему измененному примеру:

Java 8 представила Iterable#forEach() / Map#forEach() метод, который более эффективен для многих Collection / Map реализации по сравнению с «классическим» для каждого цикла. Однако и в этом случае индекс не предусмотрено. Фокус здесь в том, чтобы использовать AtomicInteger вне лямбда-выражения. Примечание: переменные, используемые в лямбда-выражении, должны быть фактически окончательными, поэтому мы не можем использовать обычный int .

одно из изменений Sun рассматривает для Java7 должен обеспечить доступ к внутреннему Iterator в foreach петли. синтаксис будет примерно таким (если это принято):

это синтаксический сахар, но, по-видимому, было сделано много запросов для этой функции. Но пока он не будет одобрен, вам придется рассчитывать итерации самостоятельно или использовать регулярный цикл for с Iterator .

Идиоматическое Решение:

это на самом деле решение, что Google предлагает в гуавы обсуждения почему они не дают CountingIterator .

Если вам нужен счетчик в цикле for-each, вам нужно подсчитать себя. Насколько мне известно, встроенного счетчика нет.

Источник

Есть ли способ получить доступ к счетчику итераций в Java для каждого цикла?

Есть ли способ в Java для каждого цикла

чтобы узнать, как часто цикл уже обрабатывается?

Помимо использования старого и известного цикла for(int i=0; i — это конструкция

единственный способ получить такой счетчик в цикле for-each?

В ситуациях, когда мне нужен только индекс, например, в предложении catch, я иногда использую indexOf.

Читайте также:  Установка поверочная упсг для счетчиков газа

Нет, но вы можете предоставить свой счетчик.

Причина этого в том, что внутри каждого цикла внутри нет счетчика; он основан на интерфейсе Iterable, т.е. использует Iterator для прокрутки «коллекции» — это может быть не коллекция на самом деле, и на самом деле может быть чем-то совсем не на основе индексов (например, связанного списка).

Есть и другой способ.

Учитывая, что вы пишете свой собственный класс Index и статический метод, который возвращает Iterable над экземплярами этого класса, вы можете

Где реализация With.index — это что-то вроде

Самое простое решение — просто запустить свой собственный счетчик таким образом:

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

См. например, следующий код:

Когда вы запустите это, вы увидите что-то вроде:

указывает, что, правильно, порядок не считается характерной особенностью набора.

Есть и другие способы сделать это без ручного счетчика, но это справедливая работа для сомнительной выгоды.

Использование lambdas и функциональных интерфейсов в Java 8 позволяет создавать новые абстракции цикла. Я могу перебрать коллекцию с индексом и размером коллекции:

Который я реализовал как:

Возможности бесконечны. Например, я создаю абстракцию, которая использует специальную функцию только для первого элемента:

Правильно печатает список, разделенный запятыми:

Который я реализовал как:

Библиотеки начнут всплывать, чтобы делать такие вещи, или вы можете катить их.

Я боюсь, что это невозможно с foreach . Но я могу предложить вам простые старомодные for-loops:

Обратите внимание, что интерфейс List дает вам доступ к it.nextIndex() .

(редактировать)

К вашему измененному примеру:

В Java 8 представлен метод Iterable#forEach() / Map#forEach() , который более эффективен для многих реализаций Collection / Map по сравнению с «классическим» для каждого цикла. Однако и в этом случае индекс не предоставляется. Трюк здесь заключается в использовании AtomicInteger вне выражения лямбда. Примечание: переменные, используемые в выражении лямбда, должны быть действительно окончательными, поэтому мы не можем использовать обычный int .

Одним из изменений, которые Sun рассматривает для Java7 является предоставление доступа к внутреннему Iterator в циклах foreach. синтаксис будет примерно таким (если это будет принято):

Это синтаксический сахар, но, очевидно, было сделано много запросов на эту функцию. Но до тех пор, пока он не будет одобрен, вам придется самостоятельно считать итерации или использовать регулярный цикл for с Iterator .

Идиоматическое решение:

на самом деле это решение, которое Google предлагает в обсуждении в Гуаве, почему они не предоставили CountingIterator .

Если вам нужен счетчик в каждом цикле, вы должны сами подсчитать. Насколько мне известно, нет встроенного счетчика.

Существует много способов, но метод является одним из способов

Существует «вариант» для ответа pax. ; -)

Хотя для достижения того же самого было упомянуто много других способов, я поделюсь своим путем для некоторых неудовлетворенных пользователей. Я использую функцию Java 8 IntStream.

1. Массивы

2. Список

Я обнаружил, что использование простого цикла for с инкрементирующим индексом было самым эффективным и надежным решением, которое размещено здесь: qaru.site/questions/31752/.

Я немного удивлен, никто не предложил следующее (я признаю, что это ленивый подход. );
Если stringArray является списком некоторого типа, вы можете использовать что-то вроде stringArray.indexOf(S), чтобы вернуть значение для текущего счетчика.

Примечание: это предполагает, что элементы списка уникальны или что это не имеет значения, если они не являются уникальными (потому что в этом случае он вернет индекс найденной первой копии).

Читайте также:  Счетчик меркурий 231 трехфазный двухтарифный инструкция по применению

Есть ситуации, когда этого было бы достаточно.

Источник

Количество итераций цикла

Привет, не могу разобраться как вывести количество итераций цикла if. Пробую через сделать это через вспомогательную переменную count, но выводит нули. Помогите пожалуйста, заранее спасибо

Сумма результатов итераций цикла for
for (int i = a; i #include using namespace std; int main().

Посчитать количество итераций цикла
#include «stdafx.h» #include #include using namespace std; int main().

Только меня смущают эти строчки? i элементу присваиваем i+1 затирая i, потом в i+1 помещаем тоже самое значение и потом опять повторяем первую строчку, в итоге просто затерли значение i элемента и выполнили 2 пустых действия после
Во втором цикле for тоже самое

Добавлено через 4 минуты
Если это перестановка 2 элементов то надо например так:

alicesmagic, ага, теперь понял, что проблема в массиве. Все хорошо бы, но в консоль выводится уже отсортированный массив, т.е. сортирует правильно, но счетчики не выводит. Надо еще посмотреть. спасибо

Добавлено через 7 минут

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как посчитать количество итераций цикла?
Не совсем представляю, как это осуществить. Т.е. возвращается х, а еще что-то вернуть, то будет.

Не выполняется нужное количество итераций цикла
Добрый день ребята. Помогите найти ошибку. .

Подсчитать количество итераций цикла в единицу времени
Хочу подсчитать производительность проги, зациклив её на час и подсчитав количество итераций. Как.

Задать количество итераций цикла по несмежным диапазонам
Доброго времени суток всем! Столкнулся с такой задачей: есть цикл для заполнения ячеек.

Источник

Циклы в Java

Что такое циклы

Циклы с предусловием: условие выполнения определяется перед первой итерацией.

Циклы с постусловием: условие выполнения определяется после первой итерации (поэтому они всегда выполняются минимум один раз). Полезны, когда нужно выполнять некое действие, пока не реализуется некое условие: например, считывать ввод пользователя, пока он не введет слово “stop”.

Циклы со счетчиком: количество итераций определяется смоделированным счетчиком. В условии цикла задается его начальное и конечное значение. Каждую итерацию счетчик наращивается. Мы можем заранее определить количество итераций.

Эти циклы бывают полезны, когда нужно перебрать все элементы в какой-то коллекции. Циклы со счетчиком называют “циклами для. ”. “Для каждого элемента некоторой коллекции осуществить следующие действия”.

Допустимы случаи, когда выполнение цикла можно прервать до достижения его условия. Например, если у нас есть коллекция из 100 чисел и нам необходимо понять, содержит ли она отрицательные числа. Мы можем начать перебор всех чисел, используя цикл “для”. Но когда мы найдем первое отрицательное число, нам не обязательно перебирать оставшиеся числа. Мы можем прервать выполнение цикла, если его дальнейшее выполнение не имеет смысла. Подобные ситуации называют прерыванием цикла.

Безусловные циклы — циклы, которые выполняются бесконечно. Например: “Пока 1=1, печатать “1=1””. Такая программа будет выполняться, пока ее вручную не прервут.

Данные циклы тоже бывают полезны, когда используются вместе с прерыванием цикла “изнутри”. Используйте их осторожно, чтобы не спровоцировать зависание программы.

Подробнее с циклами в языке программирования Java можно познакомиться на 4-ом уровне курса JavaRush. В частности, с циклами while и for.

Циклы в Java

while , do.. while и for можно использовать в качестве безусловных циклов. Сравнить синтаксис циклов в разных языках программирования можно на четвертом уровне обучения курса JavaRush. Например циклов for и while. Рассмотрим кратко каждый из представленных типов.

Читайте также:  Счетчик для сайта восстановить

Источник

Как вывести счетчик итераций цикла java

Цикл в программировании используется для многократного повторения определенного фрагмента кода. В Java существует 3 оператора цикла: for, while, do-while.

В этом уроке мы рассмотрим:

В конце урока предложены упражнения для закрепления материала.

Рассмотрим подробнее использование операторов цикла в Java.

При использовании конструкции for заранее известно, сколько раз необходимо осуществить повторение. При использовании конструкций while или do-while повторения будут происходить до тех пор, пока выполняется некоторое условие (логическое выражение)

Цикл for в Java.

Рассмотрим пример: вывод на экран числа от 1 до 10.

Конструкция for имеет следующий вид:

Инициализация — первый параметр, который содержит переменную и ее начальное значение. С помощью этой переменной будет подсчитываться количество повторений цикла. В нашем примере это переменная int i = 1.

Условие — второй параметр, содержит некоторое логическое выражение — условие при котором будет выполняться цикл. В нашем примере это условие i .

Итерация — третий параметр, выражение, изменяющее переменную (заданную в инициализации) после каждого шага цикла. Изменение происходит только в случае выполнения условия. В нашем примере итерация i++ — увеличение переменной на единицу. Также для итерации часто используется i— — уменьшение переменной на единицу.

Пример: Вывод на экран чисел от 10 до −10:

Цикл while в Java.

Пример: Вывод на экран значений от 1 до 10.

Конструкция while имеет следующий вид:

Конструкция while выполняет выражение в фигурных скобках до тех пор, пока параметр логическое_выражение имеет истинное значение (true). Этот параметр является условием выполнения цикла. В выше приведенном примере, логическое выражение имеет вид i

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

Приведем пример цикла, который не выполнится ни разу:

Для реализации бесконечного цикла, в качестве параметра достаточно указать true

Цикл do-while в Java.

В отличие от оператора while, do-while является оператором постусловия, который сначала выполняет тело цикла, а потом осуществляет проверку условия. Таким образом, тело цикла выполнится всегда хотя бы один раз.

Пример: Вывод на экран значений от 1 до 10.

Конструкция do — while имеет следующий вид:

Как видно из конструкции, тело цикла выполняется перед проверкой условия. Впоследствии, тело цикла повторится в случае, если логическое_выражение было истинно. Оператор do-while удобно применять, если некоторые действия необходимо выполнить, по крайней мере, один раз, а их повторение будет зависеть от условия.

Вспомним пример цикла while, который не выполнится ни разу, и перепишем его с помощью оператора do-while

После выполнения цикла, на экран будет выведено значение i= 10.

Досрочный выход из цикла (оператор break)

Выполнение цикла можно прервать, если внутри тела цикла вызвать оператор break. После выполнения оператора break произойдет моментальный выход из цикла (не будет окончена даже текущая итерация). Управление передастся оператору, следующему за циклом.

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

Источник