wake-up-neo.com

Wie man for-Loops in Java erstellt, erhöht sich in anderen Schritten als 1

Wenn Sie eine for-Schleife haben:

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

Es funktioniert gut. Wenn Sie jedoch eine for-Schleife haben:

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

es funktioniert nicht Könnte mir das bitte jemand erklären?

64
TomLisankie

Das liegt daran, dass j+3 den Wert von j nicht ändert. Sie müssen dies durch j = j + 3 oder j += 3 ersetzen, damit der Wert von j um 3 erhöht wird:

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

Da niemand sonst Could someone please explain this to me? angegangen ist, glaube ich, dass ich:

j++ ist eine Abkürzung, es ist keine eigentliche Operation (ok, es ist wirklich IS, aber bitte zur Erklärung)

j++ ist wirklich gleich der Operation j = j + 1;, es sei denn, es handelt sich nicht um ein Makro oder um ein Inline-Ersetzen. Es gibt viele Diskussionen über die Operationen von i+++++i und was das bedeutet (weil es als i++ + ++i OR (i++)++ + i interpretiert werden könnte

Was bringt uns zu: i++ gegen ++i. Sie werden als post-increment- und pre-increment-Operatoren bezeichnet. Können Sie sich vorstellen, warum sie so heißen? Der wichtige Teil ist, wie sie in Zuweisungen verwendet werden. Zum Beispiel könnten Sie Folgendes tun: j=i++; oder j=++i; Wir werden jetzt ein Beispielexperiment machen:

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

Was sind die Werte von i, j und k?

Ich gebe dir die Antworten und lass es dir klappen;)

i = 7, j = 5, k = 7; Das ist die Stärke der Pre- und Post-Increment-Operatoren und die Gefahr, dass sie falsch verwendet werden. Aber hier ist die alternative Art, dieselbe Reihenfolge von Operationen zu schreiben:

// 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, jetzt, da ich Ihnen gezeigt habe, wie der ++-Operator funktioniert, wollen wir untersuchen, warum es für j+3 nicht funktioniert ... Erinnern Sie sich noch, wie ich es früher als "Abkürzung" bezeichnet habe? Das ist es einfach, siehe das zweite Beispiel, denn das ist effektiv , was der Compiler vor der Verwendung des Befehls ausführt (es ist komplizierter als das, ist aber nicht für die ersten Erklärungen geeignet). Sie werden also sehen, dass die "erweiterte Abkürzung" i = UND i + 1 hat. Dies ist alles, was Ihre Anfrage hat.

Dies geht auf die Mathematik zurück. Eine Funktion ist definiert, wobei f(x) = mx + b oder eine Gleichung y = mx + b so nennen wir mx + b ... es ist sicherlich keine Funktion oder Gleichung. Es ist höchstens ein Ausdruck. Was ist alles j+3 ist ein Ausdruck. Ein Ausdruck ohne Zuweisung tut uns nichts, aber er braucht CPU-Zeit (vorausgesetzt, der Compiler optimiert ihn nicht).


Ich hoffe, das klärt die Dinge für Sie und gibt Ihnen Raum, um neue Fragen zu stellen. Prost!

38
jcolebrand

In Ihrem Beispiel erhöht sich j+=3 um 3.

(Hier nicht viel anderes zu sagen, wenn es um die Syntax geht, würde ich zuerst Googeln vorschlagen, aber ich bin neu hier, daher könnte ich mich irren.)

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

}

j+3 weist j den neuen Wert nicht zu, addiert j=j+3 weist j den neuen Wert zu und die Schleife wird um 3 nach oben verschoben. 

j++ ist wie das sagen von j = j+1. In diesem Fall weisen Sie j den neuen Wert genau wie oben zu.

7
Abraham Adam

Veränderung 

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

zu 

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

Es sollte so sein

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

aber pass auf 

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

oder 

for(int j = 0; j<=90; j = j + 3)
4
Konz Mama

Wenn Sie eine for-Schleife haben:

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

In dieser Schleife verwenden Sie eine Abkürzung, die von der Java-Sprache bereitgestellt wird, dh einem Postfix-Operator (use-then-change), der j = j + 1 entspricht. Der geänderte Wert wird also initialisiert und für die nächste Operation verwendet.

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

In dieser Schleife erhöhen Sie Ihren Wert einfach um 3, initialisieren ihn jedoch nicht auf die Variable j, sodass der Wert von j unverändert bleibt.

0

Probieren Sie es einfach aus

for(int i=0; i<5; i=i+2){//value increased by 2
//body
}

OR

for(int i=0; i<5; i+=2){//value increased by 2
//body
}
0

Der "inkrement" -Teil einer Schleifenanweisung muss den Wert der Indexvariablen ändern, um Auswirkungen zu haben. Die Langschriftform von "++ j" ist "j = j + 1". Wie andere Antworten bereits gesagt haben, lautet die korrekte Form Ihres Inkrements "j = j + 3", was nicht so kurz ist wie ein Inkrementieren um eins. "j + 3" ändert, wie Sie jetzt wissen, j nicht; Es ist ein Ausdruck, dessen Auswertung keine Auswirkung hat.

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

j ++ bedeutet j = j + 1, j-Wert bereits 0 jetzt addieren wir 1, so dass jetzt der Summenwert von j + 1 zu 1 wird, und schließlich überschreiben wir den j-Wert (0) mit dem Summenwert (1) hier überschreiben wir also den j-Wert um j + 1. Daher wird jeder j-Iterationswert um 1 erhöht.

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

Hier bedeutet j + 3 j-Wert bereits 0, jetzt addieren wir 3, so dass jetzt der Summenwert von j + 3 3 ist, aber wir überschreiben den vorhandenen j-Wert nicht. Damit die JVM den Programmierer anfragt, berechnen Sie den neuen Wert, wobei Sie jedoch den Wert der Variablen (d. H. J) zuweisen. Deshalb erhalten wir einen Kompilierzeitfehler "ungültiger AssignmentOperator".

Wenn wir den j-Wert um 3 erhöhen wollen, können wir einen der folgenden Wege verwenden.

 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.  
0
Gopi Rajkumar