Chỉ là tài liệu tham khảo cho những khách truy cập trong tương lai Giả sử chúng tôi có một mảng có tên là foo
trong đó có 10 mục. Điều gì sẽ xảy ra nếu chúng tôi cố gắng lặp lại bằng đoạn mã sau ?:
for(int i = 0;i<=foo.length;i++){
//some code that uses foo[i] here
}
Câu trả lời là IndexOutOfBoundsException
Lý do rất đơn giản, như đã nói trước đây foo
chứa 10 phần tử có nghĩa là bạn có thể truy cập chúng bằng cách sử dụng foo[0] to foo[9]
Vì lập chỉ mục mảng bắt đầu từ 0 foo[9]
chứa phần tử cuối cùng trong mảng của bạn (phần tử thứ 10) `
Điều gì xảy ra trong for
vòng lặp?
Khi lặp lại, bạn luôn kiểm tra i<=foo.length
để tiếp tục. Vấn đề là khi giá trị của i
là 9 biểu thức i<=foo.length(which means i<=10)
đánh giá thành true
.Điều đó có nghĩa là for
vòng lặp sẽ chạy lần cuối. Khi điều này xảy ra trong vòng lặp của bạn, bạn sẽ cố gắng truy cập foo[10]
không tồn tại và do đó IndexOutOfBoundsException
Vì vậy, hãy nhớ rằng khi bạn muốn lặp lại một mảng, bạn luôn luôn sử dụng i<foo.length
Vì vậy, như bạn cũng đã tìm ra giải pháp cho vấn đề của bạn là:
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);
}