Я не понимаю, как это работает для цикла - PullRequest
0 голосов
/ 17 ноября 2011
for (int i = 0; i < 20-i; i+=3) {

     System.out.println(--i);
}

Почему начальное значение -1 и как оно увеличивает это значение?

Ответы [ 8 ]

5 голосов
/ 17 ноября 2011

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

В каждом цикле вы добавляете 3, но затем вы вычитаете 1, прежде чем использовать значение. Другими словами, вы фактически добавляете только 2. Используемые вами значения i: -1, 1, 3, 5, 7, что немного сбивает с толку!

РЕДАКТИРОВАТЬ: Просто, чтобы добавить, он останавливается в этой точке, потому что в следующий раз через цикл у вас будет 7+3, что =10 и 10 !< 20-10, поэтому он не может сделать эта итерация.

1 голос
/ 17 ноября 2011

- i сначала уменьшает значение i, а -1 печатается как первое значение. В конце каждого цикла я увеличивается на 3.

Тогда я иду в каждом цикле как
я -> -1 -> 2
я -> 1 -> 4
до
я -> 7 -> 10

1 голос
/ 17 ноября 2011

Ваша переменная цикла модифицируется как в операторе for, так и в теле.Сначала вычисляется выражение --i, что дает -1.Затем оператор for изменяет его, добавляя 3. В следующий раз в цикле он должен забрать еще 1 перед печатью и т. Д.

1 голос
/ 17 ноября 2011

- i - оператор предварительного декремента. Сначала уменьшается значение в i, а затем доступ к нему для печати, поэтому значение -1

i-- это оператор пост декремента Сначала значение доступа в i, а затем уменьшает значение, поэтому значение будет 0

1 голос
/ 17 ноября 2011

Внутри println вы отображаете --i.- уменьшает значение i.Для начала в цикле i = 0.

Когда вы уменьшаете 0, вы получаете -1. ​​

Сам цикл for добавляет к i с i + = 3 на каждой итерации.

1 голос
/ 17 ноября 2011

Поскольку у вас есть --i, если бы у вас был i--, первый вывод был бы 0.

- я уберу один ответ, как ++, я добавлю один к ответу.

Итак, независимо от того, какой вывод строит ваш цикл, 1 всегда будет вычитаться из конечного результата из-за --i.

Если бы у вас был i--, он все равно вычитал бы один из конечногоответ, но было бы, что, пока цикл не закончился, вычесть 1.

0 голосов
/ 17 ноября 2011

- i - оператор предварительного уменьшения. сначала уменьшите значение в i с 1, а затем напечатайте его,
таким образом, если значение i в настоящий момент равно 0, 1-е значение уменьшается на 1, что означает i==i-1, затем выведите его i=-1

0 голосов
/ 17 ноября 2011

В цикле for сначала у вас есть присвоение - в данном случае i = 0; - это начальное значение i.
Следующая часть - это условие - здесь i < 20 - i - это будет проверяться на каждом шаге цикла перед его вводом.
Третья часть имеет условие - i += 3 Это будет увеличивать i на 3 в каждомитерация.

Итак .. Теперь у вас есть i = 0 для начала, i < 20 -i равно true, поэтому он входит в цикл и выполняет оператор System.out.println(--i);
Этооператор уменьшения, поэтому он уменьшает i на единицу, а затем печатает его.

Это повторяется до тех пор, пока условие i < 20 -i равно true.

...