В качестве альтернативы он мог бы, int j=0; for(;j<=90;){... j+=3;}но это неочевидно;)
jcolebrand
6
@drachenstern Другими словами, цикл while.
dkarp 03
@dkarp ~ Конечно, но, видя, что большинство людей не думают об этом синтаксисе, я подумал, что я укажу на него. Тем более, что OP, очевидно, изучает Java и программирование в молодом возрасте (проверьте профи и связанный блог). Мне жаль, что у меня не было ТАКОГО возраста.
jcolebrand 03
44
Поскольку никто больше не занимался, 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 ++ означает 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; это выражение, оценка которого не имеет никакого эффекта.
В этом цикле вы используете сокращение, предоставляемое языком java, что означает постфиксный оператор (использование-затем-изменение), который эквивалентен j = j + 1, поэтому измененное значение инициализируется и используется для следующей операции.
for(j = 0; j<=90; j+3){}
В этом цикле вы просто увеличиваете свое значение на 3, но не инициализируете его обратно переменной j, поэтому значение j остается измененным.
j++
? Побочный эффект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, addj=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 j = 0; j<=90; j += 3)
но берегись
for(int j = 0; j<=90; j =+ 3)
или же
for(int 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
источник