Подтвердить что ты не робот

Как сделать для циклов в Java увеличиваться с шагом, отличным от 1

Если у вас есть цикл for следующим образом:

for(j = 0; j<=90; j++){}

Он отлично работает. Но когда у вас есть цикл for следующим образом:

for(j = 0; j<=90; j+3){}

он не работает. Может ли кто-нибудь объяснить это мне?

4b9b3361

Ответ 1

Thats, потому что j+3 не изменяет значение j. Вам нужно заменить это на j = j + 3 или j += 3, чтобы значение j увеличилось на 3:

for (j = 0; j <= 90; j += 3) { }

Ответ 2

Поскольку никто другой не решался 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 an example

Каковы значения i, j и k?

Я дам вам ответы и дам вам это сделать;)

i = 7, j = 5, k = 7; Это сила операторов pre и post increment и опасности их неправильного использования. Но здесь альтернативный способ записи того же порядка операций:

// 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 an example

Хорошо, теперь, когда я показал вам, как работает оператор ++, давайте рассмотрим, почему он не работает для j+3... Помните, как я назвал его "стенографией" раньше? Это просто, см. Второй пример, потому что это эффективно то, что делает компилятор перед использованием команды (это сложнее, чем это, но это не для первых объяснений). Таким образом, вы увидите, что "расширенная стенография" имеет i = AND i + 1, который является всем, что имеет ваш запрос.

Это относится к математике. Определяется функция где f(x) = mx + b или уравнение y = mx + b, так что мы называем mx + b... это, конечно, не функция или уравнение. В лучшем случае это выражение. Это все j+3 - выражение. Выражение без назначения не делает нам ничего хорошего, но оно занимает процессорное время (предполагая, что компилятор не оптимизирует его).


Я надеюсь, что это прояснит вам ситуацию и даст вам возможность задать новые вопросы. Ура!

Ответ 3

В вашем примере j+=3 увеличивается на 3.

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

Ответ 4

for(j = 0; j<=90; j = j+3)
{

}

j+3 не присваивает новое значение j, add j=j+3 присваивает новое значение j, и цикл будет двигаться вверх на 3.

j++ походит на высказывание j = j+1, поэтому в этом случае вы назначаете новое значение j так же, как и выше.

Ответ 5

Измените

for(j = 0; j<=90; j+3)

to

for(j = 0; j<=90; j=j+3)

Ответ 6

Это должно быть как

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)

Ответ 7

Просто попробуйте это

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
}

Ответ 8

Вы также можете написать код как

for(int i=0;i<n;i++)
{
      //statements;
      i=i+2;//cause you want to increment i by 3 
}

Ответ 9

Часть "increment" оператора цикла должна изменить значение индексной переменной, чтобы иметь какой-либо эффект. Форма длинной формы "++ j" равна "j = j + 1". Итак, как говорили другие ответы, правильная форма вашего приращения равна "j = j + 3", которая не имеет такой краткой стенограммы, как приращение на единицу. "j + 3", как вы знаете, на самом деле не меняет j; это выражение, оценка которого не имеет эффекта.

Ответ 10

Если у вас есть цикл for следующим образом:

for(j = 0; j<=90; j++){}

В этом цикле вы используете стенографию, предоставляемую языком java, что означает постфиксный оператор (use-then-change), который эквивалентен j = j + 1, поэтому измененное значение инициализируется и используется для следующей операции.

for(j = 0; j<=90; j+3){}

В этом цикле вы просто увеличиваете свое значение на 3, но не инициализируете его обратно переменной j, поэтому значение j остается измененным.

Ответ 11

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). Вот почему мы получаем ошибку во время компиляции "недопустимый 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.