Nur eine Referenz für zukünftige Besucher Angenommen, wir haben ein Array namens foo
, die 10 Elemente enthält. Was passiert, wenn wir versuchen, geschieht iterieren den folgenden Code verwenden ?:
for(int i = 0;i<=foo.length;i++){
//some code that uses foo[i] here
}
Die Antwort ist ein IndexOutOfBoundsException
Der Grund simple.As ist, sagte vor foo
10 Elemente enthält, das heißt, dass Sie sie foo[0] to foo[9]
zugreifen können Seit Array Indizierung beginnt von 0 foo[9]
enthält das letzte Element in Ihrem Array (das 10. Element) `
Was passiert jedoch in der for
Schleife?
Während Sie iterieren, überprüfen Sie immer i<=foo.length
, um fortzufahren. Das Problem ist, dass, wenn der Wert i
9 ist der Ausdruck i<=foo.length(which means i<=10)
ergibt true
. Das bedeutet, dass die for
Schleife für ein letztes Mal ausgeführt wird. Wenn dies in Ihrer Schleife passiert, versuchen Sie auf foo[10]
zugreifen, die nicht vorhanden ist und daher IndexOutOfBoundsException
Also denken Sie daran, dass, wenn Sie ein Array Sie
Verwendung i<foo.length
immer iterieren so wie Sie es auch gedacht, die Lösung für Ihr Problem heraus ist dies:
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);
}
Sicherstellen, dass der Wert im Feld [i] die Länge des Felds – radhakrishnan
nicht überschreitet, wenn ich includeFields 'name = 'ID', Wert = Ausdruck {Name = '$ first', Ausdruck = $ ID}' drucke. Ist die Ausnahme wegen dieser @radhakrishnan – svm
Wo ist 'i' definiert? – Veeram