Woran erkennt man am Code, dass man in Java bei array den Index meint und nicht die Zahl der "Schublade"?
Zum Beispiel array[3]= 10
Woher weiß man jetzt, dass der Index 3 an der eigentlich 4. Stelle/Schublade gemeint ist?
Und nicht 3. Schublade mit dem index 2.
5 Antworten
Das ist bei Arrays und Listen eigentlich immer so. Java (und viele andere Programmiersprachen auch) fangen bei Null an zu zählen, das heißt, dass das erste Element den Index 0 hat, das zweite den Index 1 usw.
Das Array bietet dir für den Zugriff auf seine Elemente nur eine Schnittstelle:
myArray[...]
Diese Schnittstelle erwartet stets den Indexwert. Solltest du einen Wert außerhalb des Indexbereich angeben, wird dir das Programm einen Laufzeitfehler zurückgeben.
Wenn du an anderen Stellen deines Codes nicht mit dem Indexwert arbeiten möchtest, musst du bei Kommunikation mit dem Array umrechnen.
Beispiel:
int last = myArray.length;
System.out.println(myArray[last - 1]);
Für solche Fälle solltest du dann auch darauf achten, sehr klare Namen zu wählen. Im besten Fall arbeitest du von Beginn an immer mit dem Indexwert.
int lastIndex = myArray.length - 1;
System.out.println(myArray[lastIndex]);
Im Reden/Schreiben über die Sprache wäre es ebenfalls vorteilhaft, sich stets klar auszudrücken.
Beispiel:
Das dritte Element im Array hat den Index 2.
Weil es ein eindimensionaler Array ist.
Position = Index + 1
Array[3] stellt demnach die 4. Stelle im Array dar. Und da du nur eine Schublade hast, gibt es hier nicht viel mehr.
Anders verhält es sich bei zwei(mehr-)dimensionalen Arrays.
String[][] zeug = {
{ "1", "2", "3"},
{ "4" ,"5", "6" }
};
Hier hast du nun deine zwei Schubladen.
zeug[0][1] ergibt "2"
zeug[1][2] ergibt "6"
Weil der erste Index immer 0 ist.
Daher hat das 4. Element auch immer den Index 3. Das muss man nicht "erkennen", sondern einfach wissen. Das ist auch in den meisten Programmiersprachen identisch, es gibt nur wenige Ausnahmen.
Was soll eine "Schublade" sein, und was genau ist nun dein Problem?
Dort ist immer der Index angegeben, da gibt es keine Ausnahme.
Das ist die Länge. Wenn du ein Item mit array[i] abrufst dann ist immer der Index gemeint. Wenn ein neues array initialisierst, dann ist es die Länge.
Also muss quasi immer ein i stehen damit der Index gemeint ist? Aber bei array[3]=10 ist das irgendwie nicht der Fall...
Nein. Das i habe ich nur als Platzhalter verwendet. Da kommt natürlich der Index hin den du abrufen möchtest.
Achso, dankee:)) und ist array.lenght bei einem max. Index von 5 sechs?
Also ist das die Gesamtzahl der Schubladen?
Ja. Wenn ich mich nicht irre, dann müsste es so sein, dass du nur beim Abrufen des Wertes den Index brauchst und sonst die Anzahl der Werte.
Um bei deinem Schubladen-Bild zu bleiben:
Egal, wie viele Schubladen wir haben, die unterste Schublade hat immer die Nummer (Index) 0, und von da aus wird hochgezählt. Stell dir einfach einen Schrank vor, bei dem auf der untersten Schublade eine 0 aufgedruckt ist, auf der darüber eine 1, darüber die 2, und so weiter. Jede Schublade hat eine Nummer - das ist der Index.
Wenn du nun jemanden bitten möchtest, für dich etwas aus dem Schrank zu holen, macht es natürlich am meisten Sinn, die Nummer (also den Index) zu nennen, der auf der Schublade aufgedruckt ist. So läuft es an den meisten Stellen beim Programmieren. Man benutzt den Index, um auf die "Schubladen" (eigentlich: Elemente) zuzugreifen.
Anders sieht es natürlich aus, wenn du einen neuen Schrank bestellen willst, oder wissen willst, wie viele Schubladen ein Schrank hat. In dem Fall ist es egal, wie die Schubladen nummeriert sind.
Wenn du new int [30] schreibst, dann bestellst du einen Schrank mit 30 Schubladen. Die erste ist trotzdem mit 0 beschriftet und die letzte mit 29, aber es sind trotzdem 30 Schubladen.
Gleiches, wenn es um die Länge geht. Auch wenn der Schrank von 0 bis 29 geht, sind das 30 Schubladen.
In beiden Fällen geht es aber eben gar nicht um die Schubladen selbst oder was in ihnen ist, sondern um den Schrank, das Array.
Die Frage, die du dir also stellen musst, ist, ob es gerade um den Schrank als ganzes geht (z.B. wenn du eben ein neues Array erstellst oder wissen willst, wie viele Elemente es hat.), oder ob du gezielt auf eine Schublade zugreifen willst, also ein einzelnes Element auslesen oder schreiben willst, da musst du dann nach dem Index gehen.
Bei der Länge müsste ich doch so fragen:
Int laenge= array.length
Sytem.out.printIn ( array.lenght;" " );
Genau, array.length
Und das zeigt auch, dass es hier um eine Eigenschaft des Arrays geht, diese also nicht direkt mit dem Indexen zusammenhängt.
In anderen Programmiersprachen kann man übrigens auch Arrays mit "Löchern" haben, dann kann es eben sein, dass die Länge und die Indexe plötzlich gar nicht mehr zusammenpassen. Java allerdings erlaubt das nicht, hier sind die Indexe eben immer durchgehend und damit der erste Index immer 0 und der letzte entspricht der Länge minus 1.
Indem man einfach mal die Dokumentation zu den Technologien die man da verwendet liest.
Nein, so mein ich das eigentlich nicht. Ich mein halt woher man weiß dass mit array[3] der Index 3 gemeint ist und nicht die Schublade 3. Verstehst du? Also mir ist diese Regel schon klar...