Java IndexOutOfBoundsException:索引:7,大小:7

Java IndexOutOfBoundsException:索引:7,大小:7,java,indexoutofboundsexception,Java,Indexoutofboundsexception,我正在试图弄清楚为什么会出现这个错误。我的代码如下: 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

我正在试图弄清楚为什么会出现这个错误。我的代码如下:

 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));
    }
澄清一下:使用的所有数组列表都具有相同的长度,因为它们是从数据库生成的。下面是一些代码,您可以看到数组列表是如何生成的:

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);
            }
        }
ArrayList aRes1=新的ArrayList();
语句st=con.createStatement();
结果集rs=st.executeQuery(“从计算机系统中选择catchyname”);
System.out.printf(“计算机系统:\n”);
while(rs.next()){
字符串应答=rs.getString(“catchyname”);
问题1.添加(答案);
}
//案例
ArrayList aRes2=新的ArrayList();
rs=st.executeQuery(“从计算机系统中选择案例”);
while(rs.next()){
字符串应答=rs.getString(“cases”);
2.添加(答案);
}
ArrayList casesQuant=新的ArrayList();

对于(int i=0;i任何一个数组列表都有7个元素。请尝试检查行号547和322。您将知道是哪一个元素。

Java从索引0开始并向上。7的大小表示索引为6。 更改: (int i=0;i 第242行是“
intvar=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));

一个数字应小于预期值。

您使用的多个数组的大小不尽相同,但在所有数组上使用一个数组的索引。这就是异常的原因。

Java索引为0,因此Java数组中最后一个有效的单元格是
大小-1
。第八个值在单元格7.W中哪一行是242?听起来列表的大小不尽相同…行号是547、322、242??试试System.out.println(“+(i+1)+”:“+aRes1.get(i)+”数量:“+lowerstquant.get(i));您应该看到它正在评估Java包中的所有8.547和322,正如它所说的。行242是“for”(int i=0;ii
@Ryan,我建议删除“Change:…”因为它确实不正确。我创建上面使用的数组列表的方式将使它们的长度与ARE1相同。
System.out.printf("Expected: #s, Cases: #s, Mainboards: #s#n", aRes1.size(), 
      casesQuant.get(i), mainboardQuant.get(i));