Якщо у вас такий цикл 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.
(Тут можна сказати не багато іншого, якщо це пов’язано із синтаксисом, я б запропонував спочатку погуглити, але я тут новачок, тому можу помилитися.)
j+3
яке насправді не збільшується j
. ОП слід використовувати 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, що означає оператор постфіксу (use-then-change), що еквівалентно j = j + 1, тому змінене значення ініціалізується і використовується для наступної операції.
for(j = 0; j<=90; j+3){}
У цьому циклі ви просто збільшуєте своє значення на 3, але не ініціалізуєте його назад до змінної j, тому значення j залишається зміненим.
Це просто синтаксична помилка. Вам просто потрібно замінити j+3
на j=j+3
або j+=3
.