352 Stimmen

Unterschied zwischen Vorinkrement und Nachinkrement in einer Schleife?

Gibt es einen Unterschied in ++i y i++ in einem for Schleife? Ist es einfach eine Sache der Syntax?

1voto

Bouba Punkte 6183

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 .

1voto

Leonidas Punkte 2382

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).

0voto

sçuçu Punkte 2770

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 von i durch 1 und werten Sie anschließend i ,
  • i++ bedeutet auswerten i und später Erhöhung des Wertes von i 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)
}

0voto

Mohit Tomar Punkte 103

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.

-2voto

Tano Punkte 609

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X