Auf Thema antworten

Daß das erste Element den Index 0 hat liegt in der Funktionsweise von Computern (und historischer Faulheit!) begründet. Das merkst du, wenn du stattdessen mal in C oder gar Assembler programmierst.


Ein Array ist ein zusammenhängender Bereich im Speicher. Das heißt, um eine Position im Array anzugeben sind lediglich zwei Dinge nötig:

  1. Die Stelle, wo das Array anfängt. Dies wird durch eine einfache Speicheradresse angegeben. In C ist das eigentilch ein Pointer, wobei die C-Syntax diesen ein wenig vor dem Programmierer versteckt.
  2. Die Position im Array. Dies ist ein einfacher Offset, der auf die Speicheradresse draufaddiert wird. Die Länge aller Elemente im Array ist bekannt und gleich, und damit ist die genaue Speicheradresse eines Elements einfach berechenbar.

Ein kleines Beispiel: Wir nehmen an daß du ein Array mit fünf Integern hast, und ein Integer benötigt vier Bytes. Das Array wird wie folgt initialisiert:[ICODE]int a = new int[5];[/ICODE]


Damit macht der Compiler folgendes: Es muß Speicher vom Betriebssystem beantragt werden, und zwar 5*4 = 20 Byte: fünf Elemente, wobei jedes Element vier Byte groß ist.


In C würde das so ablaufen, daß du dem Betriebssystem sagst, du willst gerne 20 Byte Speicher haben. Dann gibt dir das Betriebssystem einen Pointer, also eine Speicheradresse, an der dein Array anfangen kann.


Wenn du jetzt auf ein Element im Array zugreifst, dann mußt du die Speicheradresse des Elements berechnen. Und diese berechnet sich zu:

Adresse + (n * Elementgröße)


Jetzt überlege mal was du für n einsetzen mußt, damit du das erste Element bekommst. Bedenke, daß dein Speicherbereich bei 'Adresse' bereits anfängt.

[SPOILER]Natürlich muß n=0 sein. Dein erstes Element liegt schließlich auf 'Adresse'.[/SPOILER]


Du mußt, wenn du in C oder Java programmierst, dich aber nicht mit Adressberechnung herumschlagen, das macht der Compiler für dich. Du sagst einfach: [ICODE]int i = a[0];[/ICODE]


Edit:

Vergiss in deinem Beispiel bitte, was die Elemente genau enthalten. a.lenght() liefert die Anzahl der Elemente zurück. Du hast 8 Elemente drin, das sagt dir die Arraylänge (=Länge des Speicherbereichs). Das hat absolut nichts damit zu tun, was die Elemente für Werte haben. Probiere das mal aus:

[ICODE]int [] array={-8, 7, 6, -5, 4, 3, -2, 1, 0}; [/ICODE]



Oben