Alternatywnie mógł, int j=0; for(;j<=90;){... j+=3;}ale to nieoczywiste;)
jcolebrand
6
@drachenstern Innymi słowy, pętla while.
dkarp,
@dkarp ~ Rzeczywiście, ale widząc, że większość ludzi nie myśli o tej składni, pomyślałem, że wskażę na to. Zwłaszcza, że OP oczywiście uczy się języka Java i programowania w młodym wieku (sprawdź profesora i powiązany blog). Żałuję, że nie miałem TAK w tym wieku.
jcolebrand
44
Ponieważ nikt inny tak naprawdę się Could someone please explain this to me?nie zajął , wierzę, że:
j++ jest skrótem, to nie jest faktyczna operacja (ok, to naprawdę JEST, ale proszę o wyrozumiałość dla wyjaśnienia)
j++jest naprawdę równa tej operacji, j = j + 1;z wyjątkiem tego, że nie jest makrem ani czymś, co powoduje zastąpienie w wierszu. Jest tu wiele dyskusji na temat operacji i+++++ii tego, co to oznacza (ponieważ można to zinterpretować jako i++ + ++iOR(i++)++ + i
Co prowadzi nas do: i++versus ++i. Nazywane są operatorami post-incrementi pre-increment. Czy wiesz, dlaczego tak się nazywają? Ważną częścią jest to, jak są używane w zadaniach. Na przykład możesz zrobić: j=i++;lub j=++i;Zrobimy teraz przykładowy eksperyment:
// 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
Jakie są wartości i, j i k?
Dam ci odpowiedzi i pozwolę ci to rozwiązać;)
i = 7, j = 5, k = 7;Taka jest siła operatorów pre i post inkrementacji oraz niebezpieczeństwa związane z ich niewłaściwym użyciem. Ale oto alternatywny sposób zapisania tej samej kolejności operacji:
// 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
Ok, teraz, kiedy pokazałem ci, jak ++działa operator, zastanówmy się, dlaczego nie działa w j+3... Pamiętasz, jak wcześniej nazwałem to „skrótem”? O to właśnie chodzi, zobacz drugi przykład, bo to skutecznie , co robi kompilator przed użyciem polecenia (nie jest to bardziej skomplikowane, ale to nie dla pierwszych wyjaśnień). Zobaczysz więc, że „rozwinięty skrót” zawiera i =AND, i + 1czyli wszystko, co ma Twoje żądanie.
To wraca do matematyki. Funkcja jest zdefiniowana gdzie f(x) = mx + blub równanie, y = mx + bwięc jak nazywamy mx + b... z pewnością nie jest funkcją ani równaniem. Co najwyżej jest to wyrażenie. To wszystko j+3jest wyrażeniem. Wyrażenie bez przypisania nic nam nie daje, ale zabiera czas procesora (zakładając, że kompilator go nie optymalizuje).
Mam nadzieję, że to wszystko wyjaśni i da ci trochę miejsca na zadawanie nowych pytań. Twoje zdrowie!
j ++ oznacza j = j + 1, wartość j już 0 teraz dodajemy 1, więc teraz sumaryczna wartość j + 1 stała się 1, w końcu zastępujemy wartość j (0) wartością sumaryczną (1), więc oto jesteśmy przesłanianie wartości j przez j + 1. Tak więc każda iteracja wartość j będzie zwiększana o 1.
for(j = 0; j<=90; j+3){}
Tutaj j + 3 oznacza wartość j już 0, teraz dodajemy 3, więc teraz suma j + 3 stała się 3, ale nie nadpisujemy istniejącej wartości j. Tak więc JVM pyta programistę, że obliczasz nową wartość, ale przypisujesz tę wartość zmiennej (tj. J). Dlatego otrzymujemy błąd w czasie kompilacji „nieprawidłowy AssignmentOperator”.
Jeśli chcemy zwiększyć wartość j o 3, możemy użyć jednego z następujących sposobów.
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.
Część „inkrementacji” instrukcji pętli musi zmienić wartość zmiennej indeksu, aby miała jakikolwiek skutek. Odręczną formą „++ j” jest „j = j + 1”. Tak więc, jak powiedziały inne odpowiedzi, poprawną formą Twojego przyrostu jest „j = j + 3”, co nie ma tak zwięzłego skrótu, jak zwiększanie o jeden. „j + 3”, jak już wiesz, właściwie nie zmienia j; jest to wyrażenie, którego ocena nie przynosi żadnego efektu.
W tej pętli używasz skrótu dostarczanego przez język java, co oznacza operator postfiksowy (użyj-to-zmień), który jest równoważny z j = j + 1, więc zmieniona wartość jest inicjalizowana i używana do następnej operacji.
for(j = 0; j<=90; j+3){}
W tej pętli po prostu zwiększasz swoją wartość o 3, ale nie inicjalizujesz jej z powrotem do zmiennej j, więc wartość j pozostaje zmieniona.
j++
jest? Efektem ubocznymj+3
jest?Odpowiedzi:
To dlatego,
j+3
że nie zmienia wartościj
. Musisz to zamienić naj = j + 3
lubj += 3
tak, aby wartośćj
wzrosła o 3:for (j = 0; j <= 90; j += 3) { }
źródło
int j=0; for(;j<=90;){... j+=3;}
ale to nieoczywiste;)
Ponieważ nikt inny tak naprawdę się
Could someone please explain this to me?
nie zajął , wierzę, że:j++
jest skrótem, to nie jest faktyczna operacja (ok, to naprawdę JEST, ale proszę o wyrozumiałość dla wyjaśnienia)j++
jest naprawdę równa tej operacji,j = j + 1;
z wyjątkiem tego, że nie jest makrem ani czymś, co powoduje zastąpienie w wierszu. Jest tu wiele dyskusji na temat operacjii+++++i
i tego, co to oznacza (ponieważ można to zinterpretować jakoi++ + ++i
OR(i++)++ + i
Co prowadzi nas do:
i++
versus++i
. Nazywane są operatoramipost-increment
ipre-increment
. Czy wiesz, dlaczego tak się nazywają? Ważną częścią jest to, jak są używane w zadaniach. Na przykład możesz zrobić:j=i++;
lubj=++i;
Zrobimy teraz przykładowy eksperyment:// 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
Jakie są wartości i, j i k?
Dam ci odpowiedzi i pozwolę ci to rozwiązać;)
i = 7, j = 5, k = 7;
Taka jest siła operatorów pre i post inkrementacji oraz niebezpieczeństwa związane z ich niewłaściwym użyciem. Ale oto alternatywny sposób zapisania tej samej kolejności operacji:// 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
Ok, teraz, kiedy pokazałem ci, jak
++
działa operator, zastanówmy się, dlaczego nie działa wj+3
... Pamiętasz, jak wcześniej nazwałem to „skrótem”? O to właśnie chodzi, zobacz drugi przykład, bo to skutecznie , co robi kompilator przed użyciem polecenia (nie jest to bardziej skomplikowane, ale to nie dla pierwszych wyjaśnień). Zobaczysz więc, że „rozwinięty skrót” zawierai =
AND,i + 1
czyli wszystko, co ma Twoje żądanie.To wraca do matematyki. Funkcja jest zdefiniowana gdzie
f(x) = mx + b
lub równanie,y = mx + b
więc jak nazywamymx + b
... z pewnością nie jest funkcją ani równaniem. Co najwyżej jest to wyrażenie. To wszystkoj+3
jest wyrażeniem. Wyrażenie bez przypisania nic nam nie daje, ale zabiera czas procesora (zakładając, że kompilator go nie optymalizuje).Mam nadzieję, że to wszystko wyjaśni i da ci trochę miejsca na zadawanie nowych pytań. Twoje zdrowie!
źródło
W twoim przykładzie
j+=3
zwiększa się o 3.(Niewiele więcej do powiedzenia tutaj, jeśli jest to związane ze składnią, sugerowałbym najpierw Google, ale jestem tutaj nowy, więc mogę się mylić.)
źródło
j+3
które nie faktycznie przyrostj
. OP powinien używaćj += 3
.for(j = 0; j<=90; j = j+3) { }
j+3
nie przypisze nowej wartości do j, addj=j+3
przypisze nową wartość do j, a pętla przesunie się w górę o 3.j++
jest jak mówieniej = j+1
, więc w tym przypadku przypisujesz nową wartość do j, tak jak powyżej.źródło
Zmiana
for(j = 0; j<=90; j+3)
do
for(j = 0; j<=90; j=j+3)
źródło
Tak powinno być
for(int j = 0; j<=90; j += 3)
ale uważaj
for(int j = 0; j<=90; j =+ 3)
lub
for(int j = 0; j<=90; j = j + 3)
źródło
Po prostu spróbuj tego
for(int i=0; i<5; i=i+2){//value increased by 2 //body }
LUB
for(int i=0; i<5; i+=2){//value increased by 2 //body }
źródło
Możesz również napisać kod jako
for(int i=0;i<n;i++) { //statements; i=i+2;//cause you want to increment i by 3 }
źródło
for(j = 0; j<=90; j++){}
j ++ oznacza j = j + 1, wartość j już 0 teraz dodajemy 1, więc teraz sumaryczna wartość j + 1 stała się 1, w końcu zastępujemy wartość j (0) wartością sumaryczną (1), więc oto jesteśmy przesłanianie wartości j przez j + 1. Tak więc każda iteracja wartość j będzie zwiększana o 1.
for(j = 0; j<=90; j+3){}
Tutaj j + 3 oznacza wartość j już 0, teraz dodajemy 3, więc teraz suma j + 3 stała się 3, ale nie nadpisujemy istniejącej wartości j. Tak więc JVM pyta programistę, że obliczasz nową wartość, ale przypisujesz tę wartość zmiennej (tj. J). Dlatego otrzymujemy błąd w czasie kompilacji „nieprawidłowy AssignmentOperator”.
Jeśli chcemy zwiększyć wartość j o 3, możemy użyć jednego z następujących sposobów.
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.
źródło
Część „inkrementacji” instrukcji pętli musi zmienić wartość zmiennej indeksu, aby miała jakikolwiek skutek. Odręczną formą „++ j” jest „j = j + 1”. Tak więc, jak powiedziały inne odpowiedzi, poprawną formą Twojego przyrostu jest „j = j + 3”, co nie ma tak zwięzłego skrótu, jak zwiększanie o jeden. „j + 3”, jak już wiesz, właściwie nie zmienia j; jest to wyrażenie, którego ocena nie przynosi żadnego efektu.
źródło
Jeśli masz pętlę for, taką jak ta:
for(j = 0; j<=90; j++){}
W tej pętli używasz skrótu dostarczanego przez język java, co oznacza operator postfiksowy (użyj-to-zmień), który jest równoważny z j = j + 1, więc zmieniona wartość jest inicjalizowana i używana do następnej operacji.
for(j = 0; j<=90; j+3){}
W tej pętli po prostu zwiększasz swoją wartość o 3, ale nie inicjalizujesz jej z powrotem do zmiennej j, więc wartość j pozostaje zmieniona.
źródło
To tylko błąd składni. Wystarczy zamienić
j+3
naj=j+3
lubj+=3
.źródło
for (let i = 0; i <= value; i+=n) { // increments by n /*code statement*/ }
ten format działa dla mnie zwiększając indeks o n
for (let i = 0; i <= value; i+=4) { // increments by 4 /*code statement*/ }
jeśli n = 4, to zwiększy się o 4
źródło