Alternativ könnte er, int j=0; for(;j<=90;){... j+=3;}aber das ist nicht offensichtlich;)
jcolebrand
6
@drachenstern Mit anderen Worten, eine while-Schleife.
Dkarp
@dkarp ~ In der Tat, aber da die meisten Leute nicht über diese Syntax nachdenken, dachte ich, ich würde darauf hinweisen. Zumal das OP offensichtlich schon in jungen Jahren Java und Programmierung lernt (siehe Profee und den verlinkten Blog). Ich wünschte, ich hätte SO in diesem Alter gehabt.
Jcolebrand
44
Da sich sonst niemand wirklich darum gekümmert hat, Could someone please explain this to me?glaube ich:
j++ ist eine Abkürzung, es ist keine tatsächliche Operation (ok, es ist wirklich, aber nehmen Sie mit mir für die Erklärung)
j++ist wirklich gleich der Operation, j = j + 1;außer dass es sich nicht um ein Makro oder etwas handelt, das eine Inline-Ersetzung durchführt. Hier gibt es viele Diskussionen über die Funktionsweise i+++++iund was dies bedeutet (weil es als i++ + ++iOP interpretiert werden könnte(i++)++ + i
Was uns bringt zu: i++versus ++i. Sie heißen die Operatoren post-incrementund pre-increment. Können Sie sich vorstellen, warum sie so benannt sind? Der wichtige Teil ist, wie sie in Aufgaben verwendet werden. Zum Beispiel könnten Sie Folgendes tun: j=i++;oder j=++i;Wir werden jetzt ein Beispielexperiment durchführen:
// 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 dich ausarbeiten;)
i = 7, j = 5, k = 7;Das ist die Macht der Operatoren vor und nach dem Inkrementieren und die Gefahr, sie falsch zu verwenden. Aber hier ist die alternative Art, dieselbe Reihenfolge 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 er nicht funktioniert j+3... Erinnern Sie sich, wie ich ihn früher als "Kurzschrift" bezeichnet habe? Das ist es ja, das zweite Beispiel sehen, denn das ist effektiv , was der Compiler tut , bevor Sie den Befehl (es ist komplizierter als das, aber das ist nicht für die ersten Erklärungen). Sie werden also sehen, dass die "erweiterte Kurzschrift" i =UND enthält, i + 1was alles ist, was Ihre Anfrage hat.
Das geht zurück auf Mathe. Eine Funktion ist definiert, wo f(x) = mx + boder eine Gleichung, y = mx + balso wie nennen wir mx + b... es ist sicherlich keine Funktion oder Gleichung. Es ist höchstens ein Ausdruck. Was alles j+3ist, ist ein Ausdruck. Ein Ausdruck ohne Zuweisung nützt uns nichts, nimmt aber CPU-Zeit in Anspruch (vorausgesetzt, der Compiler optimiert ihn nicht).
Ich hoffe, das klärt die Dinge für Sie und gibt Ihnen Raum, neue Fragen zu stellen. Prost!
(Hier gibt es nicht viel zu sagen, wenn es um die Syntax geht, würde ich zuerst Googeln vorschlagen, aber ich bin neu hier, damit ich mich irren kann.)
j ++ bedeutet j = j + 1, j Wert bereits 0, jetzt addieren wir 1, also wurde der Summenwert von j + 1 zu 1, schließlich überschreiben wir den j-Wert (0) mit dem Summenwert (1), also sind wir hier Überschreiben des j-Werts um j + 1. Jeder Iterationswert j wird also um 1 erhöht.
for(j = 0; j<=90; j+3){}
Hier bedeutet j + 3, dass der j-Wert bereits 0 ist, jetzt addieren wir 3, so dass der Summenwert von j + 3 jetzt 3 wird, aber wir überschreiben den vorhandenen j-Wert nicht. Damit JVM den Programmierer fragt, berechnen Sie den neuen Wert, aber wo Sie diesen Wert einer Variablen zuweisen (dh j). Aus diesem Grund wird der Kompilierungsfehler "ungültiger AssignmentOperator" angezeigt.
Wenn wir den j-Wert um 3 erhöhen möchten, können wir eine der folgenden Möglichkeiten 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.
Der "Inkrement" -Teil einer Schleifenanweisung muss den Wert der Indexvariablen ändern, um eine Wirkung zu erzielen. Die Langform von "++ j" ist "j = j + 1". Wie andere Antworten bereits sagten, ist die korrekte Form Ihres Inkrements "j = j + 3", was keine so knappe Abkürzung hat wie das Inkrementieren um eins. "j + 3" ändert, wie Sie inzwischen wissen, j nicht wirklich; Es ist ein Ausdruck, dessen Bewertung keine Wirkung hat.
In dieser Schleife verwenden Sie eine Kurzform, die von der Java-Sprache bereitgestellt wird. Dies bedeutet einen Postfix-Operator (use-then-change), der j = j + 1 entspricht, sodass der geänderte Wert initialisiert und für die nächste Operation verwendet wird.
for(j = 0; j<=90; j+3){}
In dieser Schleife erhöhen Sie Ihren Wert nur um 3, initialisieren ihn jedoch nicht zurück in die Variable j, sodass der Wert von j geändert bleibt.
j++
ist? Die Nebenwirkung vonj+3
ist?Antworten:
Das liegt daran,
j+3
dass sich der Wert von nicht ändertj
. Sie müssen dies durchj = j + 3
oder ersetzen,j += 3
damit der Wert vonj
um 3 erhöht wird:for (j = 0; j <= 90; j += 3) { }
quelle
int j=0; for(;j<=90;){... j+=3;}
aber das ist nicht offensichtlich;)
Da sich sonst niemand wirklich darum gekümmert hat,
Could someone please explain this to me?
glaube ich:j++
ist eine Abkürzung, es ist keine tatsächliche Operation (ok, es ist wirklich, aber nehmen Sie mit mir für die Erklärung)j++
ist wirklich gleich der Operation,j = j + 1;
außer dass es sich nicht um ein Makro oder etwas handelt, das eine Inline-Ersetzung durchführt. Hier gibt es viele Diskussionen über die Funktionsweisei+++++i
und was dies bedeutet (weil es alsi++ + ++i
OP interpretiert werden könnte(i++)++ + i
Was uns bringt zu:
i++
versus++i
. Sie heißen die Operatorenpost-increment
undpre-increment
. Können Sie sich vorstellen, warum sie so benannt sind? Der wichtige Teil ist, wie sie in Aufgaben verwendet werden. Zum Beispiel könnten Sie Folgendes tun:j=i++;
oderj=++i;
Wir werden jetzt ein Beispielexperiment durchführen:// 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 dich ausarbeiten;)
i = 7, j = 5, k = 7;
Das ist die Macht der Operatoren vor und nach dem Inkrementieren und die Gefahr, sie falsch zu verwenden. Aber hier ist die alternative Art, dieselbe Reihenfolge 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 er nicht funktioniertj+3
... Erinnern Sie sich, wie ich ihn früher als "Kurzschrift" bezeichnet habe? Das ist es ja, das zweite Beispiel sehen, denn das ist effektiv , was der Compiler tut , bevor Sie den Befehl (es ist komplizierter als das, aber das ist nicht für die ersten Erklärungen). Sie werden also sehen, dass die "erweiterte Kurzschrift"i =
UND enthält,i + 1
was alles ist, was Ihre Anfrage hat.Das geht zurück auf Mathe. Eine Funktion ist definiert, wo
f(x) = mx + b
oder eine Gleichung,y = mx + b
also wie nennen wirmx + b
... es ist sicherlich keine Funktion oder Gleichung. Es ist höchstens ein Ausdruck. Was allesj+3
ist, ist ein Ausdruck. Ein Ausdruck ohne Zuweisung nützt uns nichts, nimmt aber CPU-Zeit in Anspruch (vorausgesetzt, der Compiler optimiert ihn nicht).Ich hoffe, das klärt die Dinge für Sie und gibt Ihnen Raum, neue Fragen zu stellen. Prost!
quelle
In Ihrem Beispiel
j+=3
erhöht sich um 3.(Hier gibt es nicht viel zu sagen, wenn es um die Syntax geht, würde ich zuerst Googeln vorschlagen, aber ich bin neu hier, damit ich mich irren kann.)
quelle
j+3
was nicht wirklich erhöhtj
. Das OP sollte verwendenj += 3
.for(j = 0; j<=90; j = j+3) { }
j+3
wird j den neuen Wert nicht zuweisen, addj=j+3
wird j den neuen Wert zuweisen und die Schleife wird um 3 nach oben verschoben.j++
ist wie gesagtj = j+1
, in diesem Fall weisen Sie j den neuen Wert genau wie oben zu.quelle
Veränderung
for(j = 0; j<=90; j+3)
zu
for(j = 0; j<=90; j=j+3)
quelle
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)
quelle
Probieren Sie es einfach aus
for(int i=0; i<5; i=i+2){//value increased by 2 //body }
ODER
for(int i=0; i<5; i+=2){//value increased by 2 //body }
quelle
Sie können auch Code schreiben als
for(int i=0;i<n;i++) { //statements; i=i+2;//cause you want to increment i by 3 }
quelle
for(j = 0; j<=90; j++){}
j ++ bedeutet j = j + 1, j Wert bereits 0, jetzt addieren wir 1, also wurde der Summenwert von j + 1 zu 1, schließlich überschreiben wir den j-Wert (0) mit dem Summenwert (1), also sind wir hier Überschreiben des j-Werts um j + 1. Jeder Iterationswert j wird also um 1 erhöht.
for(j = 0; j<=90; j+3){}
Hier bedeutet j + 3, dass der j-Wert bereits 0 ist, jetzt addieren wir 3, so dass der Summenwert von j + 3 jetzt 3 wird, aber wir überschreiben den vorhandenen j-Wert nicht. Damit JVM den Programmierer fragt, berechnen Sie den neuen Wert, aber wo Sie diesen Wert einer Variablen zuweisen (dh j). Aus diesem Grund wird der Kompilierungsfehler "ungültiger AssignmentOperator" angezeigt.
Wenn wir den j-Wert um 3 erhöhen möchten, können wir eine der folgenden Möglichkeiten 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.
quelle
Der "Inkrement" -Teil einer Schleifenanweisung muss den Wert der Indexvariablen ändern, um eine Wirkung zu erzielen. Die Langform von "++ j" ist "j = j + 1". Wie andere Antworten bereits sagten, ist die korrekte Form Ihres Inkrements "j = j + 3", was keine so knappe Abkürzung hat wie das Inkrementieren um eins. "j + 3" ändert, wie Sie inzwischen wissen, j nicht wirklich; Es ist ein Ausdruck, dessen Bewertung keine Wirkung hat.
quelle
Wenn Sie eine for-Schleife wie diese haben:
for(j = 0; j<=90; j++){}
In dieser Schleife verwenden Sie eine Kurzform, die von der Java-Sprache bereitgestellt wird. Dies bedeutet einen Postfix-Operator (use-then-change), der j = j + 1 entspricht, sodass der geänderte Wert initialisiert und für die nächste Operation verwendet wird.
for(j = 0; j<=90; j+3){}
In dieser Schleife erhöhen Sie Ihren Wert nur um 3, initialisieren ihn jedoch nicht zurück in die Variable j, sodass der Wert von j geändert bleibt.
quelle
Es ist nur ein Syntaxfehler. Sie müssen nur
j+3
durchj=j+3
oder ersetzenj+=3
.quelle
for (let i = 0; i <= value; i+=n) { // increments by n /*code statement*/ }
Dieses Format funktioniert für mich, indem ich den Index um n erhöhe
for (let i = 0; i <= value; i+=4) { // increments by 4 /*code statement*/ }
Wenn n = 4, wird dies um 4 erhöht
quelle