Я пытаюсь перебрать массив, содержащий как минимум пару тысяч записей. Но вместо этого мне дали исключение IndexOutOfBoundEcxception. Я проверил свои итеративные циклы и не вижу в этом ничего плохого (я уверен, что я не пытаюсь достичь чего-либо за пределами массива). Что-то не так с моим вложением для l oop, или же массив, который я пытаюсь пройти, слишком велик?
public String filterOrder() throws SQLException{
ArrayList<OrderDetails>od= this.getOrderDetails("orderdetails");
ArrayList<orders>ord=this.getOrders();
Map<Integer,Double>map=new HashMap<Integer,Double>();
StringBuffer filter=new StringBuffer();
for(int i=0;i<=ord.size();i++) {
double tmp=0;
for(int j=0; j<=od.size();j++) {
if(ord.get(i).getOrderNumber()==od.get(j).getOrderNumber()) {
tmp=tmp+(od.get(j).getPriceEach()*od.get(j).getQuantityOrdered());
}
map.put(ord.get(i).getOrderNumber(), tmp);
}
}
for(Entry<Integer, Double> entry: map.entrySet()) {
if(entry.getValue()>5000) {
filter.append(entry.getKey()+" has a total value of : $ "+Math.round(entry.getValue()*100)/100.0+"\n");
}
}
return filter.toString();
}
context: Два массива, которые я использовал (od и ord ) содержит объекты из двух SQL таблиц, и каждый объект, хранящийся в каждой из них, соответствует одной строке / кортежу из соответствующей таблицы. Таблица "orderdetails" содержит 5990 строк, поэтому массив "od" содержит 5590 элементов. Таблица «Заказы» содержит 650 строк, поэтому массив «ord» содержит 650 элементов. Когда я преждевременно завершаю циклы (настраивая итерацию так, чтобы она заканчивалась до последней записи массива), некоторые результаты, которые я ожидал, все же вышли. Просто когда я перебираю весь массив, я получаю исключение.
Сообщение об исключении, которое я получил от своей консоли, выглядит следующим образом:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2996, Size: 2996
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at com1028_coursework_sl01586.BaseQuery.filterOrder(BaseQuery.java:150)
at com1028_coursework_sl01586.QueryTest.main(QueryTest.java:34)
В чем может быть проблема? Мои циклы или массив слишком велики?