1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Postinkrement in Java

  • Nicholas1991
  • 16. Dezember 2010 um 18:42
  • Unerledigt
  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 16. Dezember 2010 um 18:42
    • #1

    Hallo Leute,

    ich hab hier mal ein interessantes Problem zum Postinkrement wie ich finde. Gleich zu Anfang: Ja, ich weiß der Code unten ist weder hübsch noch sinnvoll ^^. Aber es geht hier mehr ums Verständnis wann der Postinkrement-Operator "aktiv" wird.

    Unten der Code gibt aus (bevor lange geraten wird): 9

    Also ist meine Sicht der Dinge:

    • Auf die Variable c wird erst mal 0 addiert, weil der Postinkrement Operator zunächst den Zugriff auf die Variable abwartet.
    • Während dem Vergleich ist c offensichtlich auch noch nicht inkrementiert worden, da ==1 mit false angegeben wird. Deshalb wird 9+c zurückgegeben.
    • Da die Position 9 im Array ausgelesen wurde, wurde auch zu diesem Zeitpunkt noch nicht inkrementiert.
    • Jetzt findet die Zuweisung statt und c ist und bleibt 9. Wo hat jetzt die Inkrementierung stattgefunden?

    Welche Zeichen im Code dienen Java als Signal dafür, dass inkrementiert werden sollte?

    Code
    public class TEST {
        public static void main(String[] args) {
            int[] a = {0,1,2,3,4,5,6,7,8,9,10};
            int c = 0;
            c = a[ ((c += c++)==1 ? 5+c:9+c) ];
            System.out.println(c);
        }
    }
  • tobias
    8
    tobias
    Mitglied
    Reaktionen
    3
    Punkte
    688
    Beiträge
    136
    • 16. Dezember 2010 um 19:22
    • #2

    Dazu gab es kürzlich einen Thread hier.

  • Wings-of-Glory
    28
    Wings-of-Glory
    Mitglied
    Reaktionen
    105
    Punkte
    8.305
    Beiträge
    1.573
    • 16. Dezember 2010 um 20:24
    • #3

    Edit: Die Erklärung ist teilweise falsch. Siehe nächstes Posting.
    -----------------

    servus,

    bei c++ wird c erst im nächsten schritt inkrementiert. bei ++c wird c erst inkrementiert und erst dann weiterverarbeitet.

    dein beispiel kann man folgendermaßen umschreiben:

    PHP
    01 public class TEST {
    02     public static void main(String[] args) {
    03         int[] a = {0,1,2,3,4,5,6,7,8,9,10};
    04         int c = 0;
    05         // c = a[ ((c += c++)==1 ? 5+c:9+c) ];
    06         if ((c+=c++)==1) { // 1. c=c+c; 2a. is c equal 1?, 2b. c=c+1;
    07 			c=a[5+c];
    08 		} else {
    09 			c=a[9+c];
    10 		} 
    11 		System.out.println(c);
    12     }
    13 }
    Alles anzeigen

    bei zeile 6 ist c in der if schleife c=c+c, c=0+0=0
    bei zeile 9 wurde c schon durch die anweisung c++ inkrementiert. c ist nun 1.
    c=a[9+1]=a[10], a[10]=9
    c=9.

    ersetzt du

    PHP
    c = a[ ((c += c++)==1 ? 5+c:9+c) ];


    durch

    PHP
    c = a[ ((c +=++c)==1 ? 5+c:9+c) ];


    sieht das ganze anders aus.

    PHP
    c=0;
    c=c+1;
    c=c+c;

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.» 

    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

    Einmal editiert, zuletzt von Wings-of-Glory (17. Dezember 2010 um 12:44)

  • sid.
    2
    sid.
    Mitglied
    Reaktionen
    1
    Punkte
    11
    Beiträge
    2
    • 16. Dezember 2010 um 21:19
    • #4

    Wings-of-Glory, du hast übersehen, dass sein Array mit 0 anfängt, d.h. a[9] = 9.

    Hab den Code auf das Nötigste reduziert und in Java ausprobiert. Ergebnis:
    Wenn eine Variable sich selbst zugewiesen wird, findet das Postinkrement gar nicht statt:

    PHP
    int c = 0;
     c += c++;
     System.out.println(c);  //Ausgabe: 0

    Hier wird das Postinkrement ausgeführt, weil die Variable, die inkrementiert wird, einer anderen Variable zugewiesen wird:

    PHP
    int c = 0;
     int b = 0;
     b += c++;
     System.out.println(b);  //Ausgabe: 0
     System.out.println(c);  //Ausgabe: 1
  • JohnFoo
    20
    JohnFoo
    Mitglied
    Reaktionen
    61
    Punkte
    4.231
    Beiträge
    761
    • 16. Dezember 2010 um 21:51
    • #5

    Nicholas, wenn dich so was weiter interessiert, kauf dir das Buch Java Puzzlers, da ist lauter so Zeug drin.

  • Wings-of-Glory
    28
    Wings-of-Glory
    Mitglied
    Reaktionen
    105
    Punkte
    8.305
    Beiträge
    1.573
    • 17. Dezember 2010 um 12:39
    • #6

    Urks, ja.
    Hm. Interessant, man lernt nie aus.

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.» 

    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung