2012-03-23 4 views
1

Я пытаюсь понять, почему я получаю эту ошибку. Мой код выглядит следующим образом:IndexOutOfBoundsException: Index: 7, Размер: 7

ArrayList lowestQuant = new ArrayList(); 
    for (int i = 0; i < aRes1.size(); i++) { 
     int var = Math.min(casesQuant.get(i), mainboardQuant.get(i)); 
     int var2 = Math.min(var, cpuQuant.get(i)); 
     int var3 = Math.min(var2, ramQuant.get(i)); 
     int var4 = Math.min(var3, graphicsQuant.get(i)); 
     lowestQuant.add(var4); 
     System.out.println(aRes1.get(i) +" quantity: "+lowestQuant.get(i)); 
    } 

aRes1 является списком Массива компьютерных систем с длиной 8 компьютерных систем.

Мне нужно найти компонент с наименьшим количеством в каждой компьютерной системе, следовательно Math.min и все ArrayList-index вид. Этот код должен содержать компонент с наименьшим количеством, и он делает! Но почему-то он останавливается до достижения 8-й компьютерной системы. Он отлично работает с первым 7. Может ли кто-нибудь сказать мне, в чем проблема? Я искал много этих ошибок и пытался установить i=1 и .size()-1/+1 ничего не помогает.

Заранее благодарен! Ошибки:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 7, Size: 7 
      at java.util.ArrayList.RangeCheck(ArrayList.java:547) 
      at java.util.ArrayList.get(ArrayList.java:322) 
      at databasen.Database.ComputerSystems(Database.java:242) 
      at databasen.Database.menuLVL1(Database.java:70) 
      at databasen.Database.mainMenu(Database.java:61) 
      at databasen.Database.main(Database.java:37) 
    Java Result: 1 

Для уточнения: Все списки массива используется теми же длины, потому что они сделаны из базы данных. Вот еще один код, чтобы вы могли видеть, как сделаны списки массивов:

ArrayList aRes1 = new ArrayList(); 
     Statement st = con.createStatement(); 
     ResultSet rs = st.executeQuery("SELECT catchyname FROM computersystems"); 
     System.out.printf("Computer sytems:\n"); 
     while (rs.next()) { 
      String answer = rs.getString("catchyname"); 
      aRes1.add(answer); 
     } 

     // Cases 
     ArrayList aRes2 = new ArrayList(); 
     rs = st.executeQuery("SELECT cases FROM computersystems"); 
     while (rs.next()) { 
      String answer = rs.getString("cases"); 
      aRes2.add(answer); 
     } 
     ArrayList<Integer> casesQuant = new ArrayList<Integer>(); 
     for (int i=0;i<aRes2.size();i++){ 
      ResultSet rs2 = st.executeQuery("SELECT currentquantity FROM components " 
        + "WHERE name ="+"'"+aRes2.get(i)+"'"); 
      while (rs2.next()) { 
       int answer2 = rs2.getInt("currentquantity"); 
       casesQuant.add(answer2); 
      } 
     } 
+0

Java индексируется 0, поэтому последней допустимой ячейкой в ​​массиве Java является 'size - 1'. Восьмое значение находится в ячейке 7. – twain249

+1

Какая строка 242? Похоже, что списки не все имеют одинаковый размер ... –

+0

Whitch - это номер строки 547, 322, 242 ?? –

ответ

0

Любой из списков массивов имеет 7 элементов. Попробуйте проверить номер строки 547 и 322. вы получите представление о том, какой из них.

+0

То, как я создал списки массивов, используемые выше, даст им ту же длину, что и aRes1. –

1

Java начинается с индекса 0 и идет вверх. Размер от 7 означает индекс 6. изменения: (INT I = 0; я < aRes1.size(); я ++) Кому: (INT I = 0; я < aRes1.size() - 1; i ++) Вычитание будет исправлено.

+0

Это не так, поверьте, я попробовал. Но спасибо за предложение! –

+0

@AndreasDam Да. Однако цикл for, предоставленный Райаном, пропустит последний элемент. Это должно быть 'i MrZander

+0

@Ryan, я предлагаю удалить «Изменить: ...», поскольку это действительно неверно. – dldnh

0

line 242 is " int var = Math.min(casesQuant.get(i), mainboardQuant.get(i)); "

Добавьте следующую строку до этого один:

System.out.printf("Expected: #s, Cases: #s, Mainboards: #s#n", aRes1.size(), 
     casesQuant.get(i), mainboardQuant.get(i)); 

Одно число должно быть меньше ожидаемого значения.

0

вы работаете с несколькими массивами, которые не все имеют одинаковый размер, но с использованием индекса из одного массива на всех массивах. это является причиной исключения.

Смежные вопросы