Hoe maak je for-lussen in Java met stappen anders dan 1

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+3de waarde van jniet verandert. Je moet dat vervangen door j = j + 3of j += 3zodat de waarde van jwordt 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+++++ien wat dat betekent (omdat het kan worden geïnterpreteerd als i++ + ++iOF (i++)++ + i

Dat brengt ons bij: i++versus ++i. Ze worden de operators post-incrementen pre-incrementgenoemd. 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 + 1heeft en dat is alles wat uw verzoek heeft.

Dit gaat terug naar wiskunde. Een functie is gedefinieerd waar f(x) = mx + bof een vergelijking y = mx + bdus hoe noemen we mx + b… het is zeker geen functie of vergelijking. Het is hoogstens een uitdrukking. Dat is alles wat j+3is, 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+=3met 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+3zal de nieuwe waarde niet toewijzen aan j, add j=j+3zal 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+3te vervangen door j=j+3of 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.

Other episodes