2017-06-19 2 views
1

einen Test mit dem Ausführen von Code unter einen java.lang.IndexOutOfBoundsException zurückgibt: Index 75, Größe: 75.Odd Größe nummeriert MutableList <Int> in Kotlin kehrt IndexOutOfBoundsException mit Iterator

Dies geschieht nicht auf einmal Listen nummeriert, nur ungerade nummerierte Listen. Mache ich das falsch? Iterieren in Java scheint das nicht zu tun.

var mList: MutableList<Int> = mutableListOf() 
for(n in 1..75) { 
    mList.add(n) 
} 
for(n in mList.iterator()) { 
    println(mList[n]) 
} 
+0

'1..75' ist ein integrativer Bereich. Das 75. Element wird zu der Liste bei Index 74 hinzugefügt. – marstran

Antwort

4

mList enthält diese Zahlen, mit diesen Indizes:

[ 1, 2, 3, 4, ... , 73, 74, 75] list contents 
    0 1 2 3 ... 72 73 74 indexes 

Deshalb, wenn Sie Index mList mit dem Inhalt mList selbst, das heißt Indizes 1 durch 75 Zugriff, mit dem Sie die Nummern 2 bis 75 geben für die ersten 74 Zugriffe und schließlich eine IndexOutOfBoundsException, wenn Sie versuchen, auf das Element bei Index 75 zugreifen, die nicht existiert.

Wenn Sie über mList iterieren wollen und seine Elemente drucken, haben Sie mehrere Möglichkeiten, das zu tun:

// using indexes with `until` 
for(i in 0 until mList.size) { println(mList[i]) } 

// using `.indices` to get the start and end indexes 
for(i in mList.indices) { println(mList[i]) } 

// range-for loop 
for(i in mList) { println(i) } 

// functional approach 
mList.forEach { println(it) } 
1

Sie iterieren alle Zahlen 1..75 aber Indizierung beginnt bei 0. 1 aus der Position Subtrahierend würden Sie den richtigen Index auf den Wert geben.

for(n in mList.iterator()) { 
    println(mList[n - 1]) 
} 

Aber schließlich ist es nicht einmal das, was Sie überhaupt tun wollten. Möglicherweise möchten Sie das Element direkt drucken oder über die Indizes 0..mList.size-1 selbst iterieren.

+1

Ahh ich sehe. Ich dachte, dass ich beim Aufruf des Iterators N als Index des Iterators und nicht den Wert referenzierte. Danke macht Sinn. Da meine Liste nicht darauf basiert, dass 0 der Startwert ist und N der Wert anstelle des Index ist, wird er überlaufen. – n0manarmy

Verwandte Themen