Als je een for-lus hebt zoals deze:
for(j = 0; j<=90; j++){}
Het werkt prima. Maar als je een for-lus hebt zoals deze:
for(j = 0; j<=90; j+3){}
het werkt niet. Kan iemand me dit alsjeblieft uitleggen?
Antwoord 1, autoriteit 100%
Dat komt omdat j+3
de waarde van j
niet verandert. Je moet dat vervangen door j = j + 3
of j += 3
zodat de waarde van j
wordt verhoogd met 3:
for (j = 0; j <= 90; j += 3) { }
Antwoord 2, autoriteit 37%
Aangezien niemand anders het daadwerkelijk heeft aangepakt Could someone please explain this to me?
Ik denk dat ik het volgende zal doen:
j++
is een afkorting, het is geen echte operatie (ok, het IS echt, maar geduld met me voor de uitleg)
j++
is eigenlijk gelijk aan de bewerking j = j + 1;
behalve dat het geen macro of iets anders is dat inline vervanging doet. Er zijn hier veel discussies over de bewerkingen van i+++++i
en wat dat betekent (omdat het kan worden geïnterpreteerd als i++ + ++i
OF (i++)++ + i
Dat brengt ons bij: i++
versus ++i
. Ze worden de operators post-increment
en pre-increment
genoemd. Kun je raden waarom ze zo heten? Het belangrijkste is hoe ze worden gebruikt in opdrachten. U kunt bijvoorbeeld het volgende doen: j=i++;
of j=++i;
We zullen nu een voorbeeldexperiment doen:
// 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
Wat zijn de waarden van i, j en k?
Ik geef je de antwoorden en laat je het uitzoeken 😉
i = 7, j = 5, k = 7;
Dat is de kracht van de pre- en post-increment-operators, en de gevaren van verkeerd gebruik. Maar hier is de alternatieve manier om dezelfde volgorde van bewerkingen te schrijven:
// 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, nu ik je heb laten zien hoe de operator ++
werkt, laten we eens kijken waarom het niet werkt voor j+3
… Onthoud hoe Ik noemde het eerder een “steno”? Dat is het gewoon, zie het tweede voorbeeld, want dat is effectiefwat de compiler doet voordat hij het commando gebruikt (het is ingewikkelder dan dat, maar dat is niet voor de eerste uitleg). U zult dus zien dat de “uitgebreide steno” i =
EN i + 1
heeft en dat is alles wat uw verzoek heeft.
Dit gaat terug naar wiskunde. Een functie is gedefinieerd waar f(x) = mx + b
of een vergelijking y = mx + b
dus hoe noemen we mx + b
… het is zeker geen functie of vergelijking. Het is hoogstens een uitdrukking. Dat is alles wat j+3
is, een uitdrukking. Een uitdrukking zonder toewijzing heeft geen zin, maar het kost wel CPU-tijd (ervan uitgaande dat de compiler het niet optimaliseert).
Ik hoop dat dit dingen voor je verduidelijkt en je wat ruimte geeft om nieuwe vragen te stellen. Proost!
Antwoord 3, autoriteit 7%
In uw voorbeeld wordt j+=3
met 3 verhoogd.
(Er valt hier niet veel anders te zeggen, als het met syntaxis te maken heeft, raad ik je aan eerst te Googlen, maar ik ben nieuw hier, dus ik kan het mis hebben.)
Antwoord 4, autoriteit 7%
for(j = 0; j<=90; j = j+3)
{
}
j+3
zal de nieuwe waarde niet toewijzen aan j, add j=j+3
zal de nieuwe waarde toewijzen aan j en de lus zal met 3 omhoog gaan
j++
is hetzelfde als zeggen j = j+1
, dus in dat geval wijst u de nieuwe waarde toe aan j, net zoals hierboven.
Antwoord 5, autoriteit 6%
Wijzigen
for(j = 0; j<=90; j+3)
naar
for(j = 0; j<=90; j=j+3)
Antwoord 6, autoriteit 3%
Het zou zo moeten zijn
for(int j = 0; j<=90; j += 3)
maar pas op voor
for(int j = 0; j<=90; j =+ 3)
of
for(int j = 0; j<=90; j = j + 3)
Antwoord 7, autoriteit 2%
Probeer dit gewoon
for(int i=0; i<5; i=i+2){//value increased by 2
//body
}
OF
for(int i=0; i<5; i+=2){//value increased by 2
//body
}
Antwoord 8
Je kunt ook code schrijven als
for(int i=0;i<n;i++)
{
//statements;
i=i+2;//cause you want to increment i by 3
}
Antwoord 9
for(j = 0; j<=90; j++){}
j++ betekent j=j+1, j-waarde al 0 nu voegen we 1 toe, dus nu wordt de somwaarde van j+1 1, eindelijk overschrijven we de j-waarde (0) met de somwaarde(1)
dus hier overschrijven we de j-waarde met j+1. Dus elke iteratie j-waarde wordt met 1 verhoogd.
for(j = 0; j<=90; j+3){}
Hier betekent j+3 de j-waarde al 0, nu tellen we 3 op, dus de somwaarde van j+3 is 3 geworden, maar we overschrijven de bestaande j-waarde niet. Zodat JVM de programmeur vraagt, berekent u de nieuwe waarde, maar waar u die waarde toewijst aan een variabele (d.w.z. j). Daarom krijgen we de compile-time error ” invalid AssignmentOperator “.
Als we de j-waarde met 3 willen verhogen, kunnen we een van de volgende manieren gebruiken.
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.
Antwoord 10
Het is gewoon een syntaxisfout. Je hoeft alleen maar j+3
te vervangen door j=j+3
of j+=3
.
Antwoord 11
for (let i = 0; i <= value; i+=n) { // increments by n
/*code statement*/
}
dit formaat werkt voor mij door de index met n te verhogen
for (let i = 0; i <= value; i+=4) { // increments by 4
/*code statement*/
}
als n = 4 dit wordt verhoogd met 4
Antwoord 12
Het “increment”-gedeelte van een lusinstructie moet de waarde van de indexvariabele wijzigen om enig effect te hebben. De lange vorm van “++j” is “j = j + 1”. Dus, zoals andere antwoorden hebben gezegd, is de juiste vorm van uw verhoging “j = j + 3”, die niet zo beknopt is als verhoging met één. “j + 3”, zoals je inmiddels weet, verandert niet echt j; het is een uitdrukking waarvan de evaluatie geen effect heeft.
Antwoord 13
Als je een for-lus hebt zoals deze:
for(j = 0; j<=90; j++){}
In deze lus gebruik je steno die wordt geleverd door de Java-taal, wat een postfix-operator (gebruik-dan-wijzig) betekent die equivalent is aan j=j+1 , dus de gewijzigde waarde wordt geïnitialiseerd en gebruikt voor de volgende bewerking.
p>
for(j = 0; j<=90; j+3){}
In deze lus verhoogt u gewoon uw waarde met 3, maar initialiseert u deze niet terug naar j variabele, dus de waarde van j blijft gewijzigd.