Если у вас есть такой цикл for:
for(j = 0; j<=90; j++){}
Работает нормально. Но когда у вас есть такой цикл for:
for(j = 0; j<=90; j+3){}
это не работает. Может кто-нибудь объяснить мне это?
Если у вас есть такой цикл for:
for(j = 0; j<=90; j++){}
Работает нормально. Но когда у вас есть такой цикл for:
for(j = 0; j<=90; j+3){}
это не работает. Может кто-нибудь объяснить мне это?
Ответы:
Это потому, j+3
что не меняет значение j
. Вам нужно заменить это на j = j + 3
или j += 3
так, чтобы значение j
увеличилось на 3:
for (j = 0; j <= 90; j += 3) { }
int j=0; for(;j<=90;){... j+=3;}
но это неочевидно;)
Поскольку никто больше не занимался, Could someone please explain this to me?
я думаю, что буду:
j++
сокращенно, это не настоящая операция (да, это действительно ЕСТЬ, но терпите меня за объяснение)
j++
действительно эквивалентно операции, j = j + 1;
за исключением того, что это не макрос или что-то, что выполняет встроенную замену. Здесь много дискуссий об операциях i+++++i
и о том, что это означает (потому что это может быть истолковано как i++ + ++i
ИЛИ(i++)++ + i
Что подводит нас к: i++
против ++i
. Их называют post-increment
и pre-increment
операторы. Вы можете догадаться, почему они так названы? Важная часть - как они используются в заданиях. Например, вы можете сделать: j=i++;
или j=++i;
Теперь мы проведем примерный эксперимент:
// declare them all with the same value, for clarity and debug flow purposes ;)
int i = 0;
int j = 0;
int k = 0;
// yes we could have already set the value to 5 before, but I chose not to.
i = 5;
j = i++;
k = ++i;
print(i, j, k);
//pretend this command prints them out nicely
//to the console screen or something, it's an example
Каковы значения i, j и k?
Я дам вам ответы и дам вам разобраться;)
i = 7, j = 5, k = 7;
В этом сила операторов до и после инкремента и опасность их неправильного использования. Но вот альтернативный способ записать тот же порядок операций:
// declare them all with the same value, for clarity and debug flow purposes ;)
int i = 0;
int j = 0;
int k = 0;
// yes we could have already set the value to 5 before, but I chose not to.
i = 5;
j = i;
i = i + 1; //post-increment
i = i + 1; //pre-increment
k = i;
print(i, j, k);
//pretend this command prints them out nicely
//to the console screen or something, it's an example
Хорошо, теперь, когда я показал вам, как ++
работает оператор, давайте посмотрим, почему он не работает для j+3
... Помните, как я ранее называл это «сокращением»? Вот именно, см. Второй пример, потому что это фактически то, что делает компилятор перед использованием команды (это более сложно, чем это, но это не для первых объяснений). Итак, вы увидите, что в «расширенном сокращении» есть i =
И, и i + 1
это все, что есть в вашем запросе.
Это восходит к математике. Функция определяется где f(x) = mx + b
или уравнением, y = mx + b
так что мы называем mx + b
... это определенно не функция или уравнение. В лучшем случае это выражение. Что все j+3
есть, выражение. Выражение без присваивания бесполезно, но требует процессорного времени (при условии, что компилятор не оптимизирует его).
Я надеюсь, что это проясняет вам ситуацию и дает вам возможность задать новые вопросы. Ура!
В вашем примере j+=3
увеличивается на 3.
(Здесь особо нечего сказать, если это связано с синтаксисом, я бы предложил сначала поискать в Google, но я здесь новичок, поэтому могу ошибаться.)
j+3
что на самом деле не увеличивается j
. OP следует использовать j += 3
.
for(j = 0; j<=90; j = j+3)
{
}
j+3
не будет присвоить новое значение j, add j=j+3
присвоит новое значение j, и цикл переместится на 3 вверх.
j++
это как сказать j = j+1
, так что в этом случае вы присваиваете новое значение j, как указано выше.
+ Изменить
for(j = 0; j<=90; j+3)
к
for(j = 0; j<=90; j=j+3)
Просто попробуйте это
for(int i=0; i<5; i=i+2){//value increased by 2
//body
}
ИЛИ ЖЕ
for(int i=0; i<5; i+=2){//value increased by 2
//body
}
Вы также можете написать код как
for(int i=0;i<n;i++)
{
//statements;
i=i+2;//cause you want to increment i by 3
}
for(j = 0; j<=90; j++){}
j ++ означает j = j + 1, значение j уже равно 0, теперь мы добавляем 1, поэтому теперь суммарное значение j + 1 стало 1, наконец, мы переопределяем значение j (0) на значение суммы (1), так что вот мы заменяя значение j на j + 1. Таким образом, значение каждой итерации j будет увеличиваться на 1.
for(j = 0; j<=90; j+3){}
Здесь j + 3 означает, что значение j уже равно 0, теперь мы добавляем 3, поэтому теперь суммарное значение j + 3 стало 3, но мы не отменяем существующее значение j. Итак, JVM спрашивает программиста, вы вычисляете новое значение, но при этом присваиваете это значение переменной (например, j). Вот почему мы получаем ошибку времени компиляции «invalid AssignmentOperator».
Если мы хотим увеличить значение j на 3, мы можем использовать любой из следующих способов.
for (int j=0; j<=90; j+=3) --> here each iteration j value will be incremented by 3.
for (int j=0; j<=90; j=j+3) --> here each iteration j value will be incremented by 3.
Часть «приращения» оператора цикла должна изменить значение индексной переменной, чтобы иметь какой-либо эффект. Полная форма "++ j" - "j = j + 1". Итак, как говорили другие ответы, правильная форма вашего приращения - «j = j + 3», что не имеет такого краткого сокращения, как приращение на единицу. «j + 3», как вы уже знаете, на самом деле не меняет j; это выражение, оценка которого не имеет никакого эффекта.
Если у вас есть такой цикл for:
for(j = 0; j<=90; j++){}
В этом цикле вы используете сокращение, предоставляемое языком java, что означает постфиксный оператор (использование-затем-изменение), который эквивалентен j = j + 1, поэтому измененное значение инициализируется и используется для следующей операции.
for(j = 0; j<=90; j+3){}
В этом цикле вы просто увеличиваете свое значение на 3, но не инициализируете его обратно переменной j, поэтому значение j остается измененным.
Это просто синтаксическая ошибка. Вам просто нужно заменить j+3
на j=j+3
или j+=3
.
for (let i = 0; i <= value; i+=n) { // increments by n
/*code statement*/
}
этот формат работает для меня, увеличивая индекс на n
for (let i = 0; i <= value; i+=4) { // increments by 4
/*code statement*/
}
если n = 4, это будет увеличиваться на 4