Bare en reference til fremtidige besøgende Antag, at vi har et array kaldet foo
som indeholder 10 elementer. Hvad sker der, hvis vi forsøger at gentage ved hjælp af følgende kode?:
for(int i = 0;i<=foo.length;i++){
//some code that uses foo[i] here
}
Svaret er en IndexOutOfBoundsException
Årsagen er enkel. Som sagt før foo
indeholder 10 elementer, hvilket betyder, at du kan få adgang til dem ved hjælp af foo[0] to foo[9]
Da matrixindeksering starter fra 0 foo[9]
indeholder det sidste element i dit array (det 10. element)`
Hvad sker der dog i for
sløjfe?
Mens du gentager, tjekker du altid i<=foo.length
for at fortsætte. Problemet er, at når værdien af i
er 9 udtrykket i<=foo.length(which means i<=10)
evalueres til true
.Det betyder, at for
loop vil køre for en sidste gang. Når dette sker i din loop, vil du prøve at få adgang til foo[10]
som ikke eksisterer og derfor IndexOutOfBoundsException
Så husk, at når du vil iterere over et array, du altid brug i<foo.length
Så som du også fandt ud af det, er løsningen på dit problem denne:
for(int i=0; i< field.length; i++){
String[] field = allFields.split(",");
String field1 = "$"+field[i];
BsonField includeFields = Accumulators.first(field[i], field1);
includeList.add(includeFields);
}