Pouze odkaz pro budoucí návštěvníky Předpokládejme, že máme pole nazvané foo
který obsahuje 10 položek. Co se stane, když se pokusíme iterovat pomocí následujícího kódu?:
for(int i = 0;i<=foo.length;i++){
//some code that uses foo[i] here
}
Odpověď je IndexOutOfBoundsException
Důvod je jednoduchý. Jak již bylo řečeno foo
obsahuje 10 prvků, což znamená, že k nim máte přístup pomocí foo[0] to foo[9]
Protože indexování pole začíná od 0 foo[9]
obsahuje poslední prvek ve vašem poli (10. prvek)`
Co se však stane v for
smyčka?
Při iteraci vždy zaškrtněte i<=foo.length
problém je v tom, že když je hodnota i
je 9 výraz i<=foo.length(which means i<=10)
vyhodnotí jako true
.To znamená, že for
smyčka se spustí naposledy. Když se to stane ve vaší smyčce, pokusíte se otevřít foo[10]
který neexistuje, a proto IndexOutOfBoundsException
Pamatujte si tedy, že když chcete iterovat pole, vždy použijte i<foo.length
Takže jak jste na to také přišli, řešení vašeho problému je toto:
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);
}