Wenn Sie eine for-Schleife wie diese haben:
for(j = 0; j<=90; j++){}
Es funktioniert gut. Aber wenn Sie eine for-Schleife wie diese haben:
for(j = 0; j<=90; j+3){}
es funktioniert nicht Könnte mir das bitte jemand erklären?
Wenn Sie eine for-Schleife wie diese haben:
for(j = 0; j<=90; j++){}
Es funktioniert gut. Aber wenn Sie eine for-Schleife wie diese haben:
for(j = 0; j<=90; j+3){}
es funktioniert nicht Könnte mir das bitte jemand erklären?
Antworten:
Das liegt daran, j+3
dass sich der Wert von nicht ändert j
. Sie müssen dies durch j = j + 3
oder ersetzen, j += 3
damit der Wert von j
um 3 erhöht wird:
for (j = 0; j <= 90; j += 3) { }
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 Funktionsweise i+++++i
und was dies bedeutet (weil es als i++ + ++i
OP interpretiert werden könnte(i++)++ + i
Was uns bringt zu: i++
versus ++i
. Sie heißen die Operatoren post-increment
und 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 + 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 wir mx + b
... es ist sicherlich keine Funktion oder Gleichung. Es ist höchstens ein Ausdruck. Was alles j+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!
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.)
j+3
was nicht wirklich erhöht j
. Das OP sollte verwenden j += 3
.
for(j = 0; j<=90; j = j+3)
{
}
j+3
wird j den neuen Wert nicht zuweisen, add j=j+3
wird j den neuen Wert zuweisen und die Schleife wird um 3 nach oben verschoben.
j++
ist wie gesagt j = j+1
, in diesem Fall weisen Sie j den neuen Wert genau wie oben zu.
Veränderung
for(j = 0; j<=90; j+3)
zu
for(j = 0; j<=90; j=j+3)
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
}
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
}
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.
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.
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.
Es ist nur ein Syntaxfehler. Sie müssen nur j+3
durch j=j+3
oder ersetzen j+=3
.