IndexOutOfBoundsException: индекс: 7, размер: 7 - PullRequest
1 голос
/ 24 марта 2012

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

 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);
            }
        }

Ответы [ 4 ]

1 голос
/ 24 марта 2012

Java начинается с индекса 0 и идет вверх.Размер 7 означает индекс 6. Изменение: (int i = 0; i

1 голос
/ 24 марта 2012

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

0 голосов
/ 24 марта 2012

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

0 голосов
/ 24 марта 2012

строка 242 - "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));

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

...