1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Postinkrement in Java

  • Nicholas1991
  • 16. Dezember 2010 um 18:42
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Nicholas1991
    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
    Punkte
    688
    Beiträge
    136
    • 16. Dezember 2010 um 19:22
    • #2

    Dazu gab es kürzlich einen Thread hier.

  • Wings-of-Glory
    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;

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

  • sid.
    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
    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
    Punkte
    8.305
    Beiträge
    1.573
    • 17. Dezember 2010 um 12:39
    • #6

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

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum