首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IndexOutOfBoundsException:索引: 7,大小:7

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

Stack Overflow用户
提问于 2012-03-24 05:39:46
回答 4查看 10.4K关注 0票数 1

我正在尝试找出为什么会出现这个错误。我的代码如下:

代码语言:javascript
运行
复制
 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查找。这段代码应该提供数量最少的组件,它做到了!但不知何故,它在到达第八个计算机系统之前就停止了。它与第一个7完美地结合在一起。谁能告诉我问题出在哪里?我已经查找了很多这样的错误,并尝试设置i=1.size()-1/+1,但都没有帮助。

提前感谢!错误:

代码语言:javascript
运行
复制
 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

下面是一些更多的代码,您可以看到数组列表是如何生成的::

代码语言:javascript
运行
复制
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);
            }
        }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-24 05:49:53

任何一个数组列表都有7个元素。尝试检查547和322行。你会知道是哪一个。

票数 1
EN

Stack Overflow用户

发布于 2012-03-24 05:53:37

Java从索引0开始,一直向上。大小为7表示索引为6。将:(int i= 0;i< aRes1.size();i++)改为:(int i= 0;i< aRes1.size()-1;i++)减1即可解决问题。

票数 1
EN

Stack Overflow用户

发布于 2012-03-24 06:14:07

第242行是"int var = Math.min(casesQuant.get(i), mainboardQuant.get(i));

在该行之前添加以下行:

代码语言:javascript
运行
复制
System.out.printf("Expected: #s, Cases: #s, Mainboards: #s#n", aRes1.size(), 
      casesQuant.get(i), mainboardQuant.get(i));

一个数字应小于预期值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9846806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档