Gibt es einen Unterschied in ++i
y i++
in einem for
Schleife? Ist es einfach eine Sache der Syntax?
Antworten
Zu viele Anzeigen?Sie erhöhen beide die Zahl. ++i
ist gleichbedeutend mit i = i + 1
.
i++
y ++i
sind sehr ähnlich, aber nicht genau gleich. Beide erhöhen die Zahl, aber ++i
inkrementiert die Zahl, bevor der aktuelle Ausdruck ausgewertet wird, während i++
erhöht die Zahl, nachdem der Ausdruck ausgewertet wurde.
int i = 3;
int a = i++; // a = 3, i = 4
int b = ++a; // b = 4, a =
Siehe dieser Link .
Bei Schleifen kann es einen Unterschied geben. Dies ist die praktische Anwendung von post/pre-increment.
int i = 0;
while(i++ <= 10) {
Console.Write(i);
}
Console.Write(System.Environment.NewLine);
i = 0;
while(++i <= 10) {
Console.Write(i);
}
Console.ReadLine();
Während der erste bis 11 zählt und 11 Mal eine Schleife macht, tut der zweite das nicht.
Meistens wird dies eher in einer einfachen while(x-- > 0 ) ; - - Schleife verwendet, um z.B. alle Elemente eines Arrays zu iterieren (ausgenommen foreach-Konstrukte hier).
Ja, es gibt einen Unterschied zwischen ++i
y i++
in einem for
Schleife, allerdings in ungewöhnlichen Anwendungsfällen; wenn eine Schleifenvariable mit Inkrement/Dekrement-Operator verwendet wird im for-Block o innerhalb des Schleifenprüfausdrucks , oder mit einer der Schleifenvariablen . Nein, es ist nicht nur eine Frage der Syntax.
Als i
in einem Code bedeutet die Auswertung des Ausdrucks i
und der Operator bedeutet keine Auswertung, sondern nur eine Operation;
++i
bedeutet Inkrementwert voni
durch 1 und werten Sie anschließendi
,i++
bedeutet auswerteni
und später Erhöhung des Wertes voni
von 1.
Die Ergebnisse der beiden Ausdrücke sind also unterschiedlich, weil sie unterschiedlich ausgewertet werden. Alles gleich für --i
y i--
Zum Beispiel;
let i = 0
i++ // evaluates to value of i, means evaluates to 0, later increments i by 1, i is now 1
0
i
1
++i // increments i by 1, i is now 2, later evaluates to value of i, means evaluates to 2
2
i
2
In ungewöhnlichen Anwendungsfällen ist es egal, ob das nächste Beispiel nützlich klingt oder nicht, es zeigt einen Unterschied
for(i=0, j=i; i<10; j=++i){
console.log(j, i)
}
for(i=0, j=i; i<10; j=i++){
console.log(j, i)
}
In bestimmten Situationen können ++i und i+1 unterschiedliche Ergebnisse liefern, dasselbe gilt für --i, i - 1 usw.
Dies liegt nicht an einem Fehler in der Funktionsweise der Inkrement- und Dekrement-Operatoren, sondern an einer kleinen Tatsache, die von Programmieranfängern manchmal übersehen wird.
Als Faustregel gilt: Verwenden Sie inc/dec nicht innerhalb der eckigen Klammern von array. Ich würde zum Beispiel nicht etwas wie arr[++i] anstelle von arr[i + 1] verwenden. Obwohl beide den gleichen Wert von i liefern würden, haben wir hier etwas übersehen.
Wenn eine Schleifenbedingung auf dem Wert von i für die Ausführung basiert, würde das Ersetzen von arr[i + 1] durch arr[++i] zu einem Fehler führen. Warum?
Sagen wir, i = 5, dann würde arr[i + 1] arr[6] bedeuten und arr[++i] würde zwar arr[6] bedeuten, aber auch den Wert von i auf 6 ändern, und das ist vielleicht nicht das, was wir tun wollen. Vielleicht wollen wir den Wert von i nicht ändern, aber durch einen einfachen ++/-- Operator haben wir den Wert geändert.
Seien Sie also vorsichtig bei der Verwendung der ++/-- Operatoren.
Ich hoffe, ich konnte meinen Standpunkt leicht verständlich machen.
Ich weiß nicht, wie es in anderen Sprachen ist, aber in Java ++i ist eine Präfix-Inkrement was bedeutet: Erhöhung i um 1 und verwenden Sie dann den neuen Wert von i in dem Ausdruck, in dem i wohnt, und i++ ist eine Postfix-Inkrement was Folgendes bedeutet: Verwendung des aktuellen Wertes von i in den Ausdruck ein und erhöhen ihn dann um 1. Beispiel:
public static void main(String [] args){
int a = 3;
int b = 5;
System.out.println(++a);
System.out.println(b++);
System.out.println(b);
} und die Ausgabe ist:
- 4
- 5
- 6