我想弄清楚为什么会出现这个错误。我的代码如下:
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 :(得分:1)
任何一个数组列表都有7个元素。请尝试检查第547和322行。你会明白哪一个。
答案 1 :(得分:1)
Java从索引0开始然后上升。大小为7表示指数为6。 更改: (int i = 0; i&lt; aRes1.size(); i ++) 至: (int i = 0; i&lt; aRes1.size() - 1; i ++) 减去一个将解决问题。
答案 2 :(得分:0)
第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));
一个数字应小于预期值。
答案 3 :(得分:0)
您正在使用多个阵列,这些阵列的大小不同,但在所有阵列上使用一个阵列的索引。这是例外的原因。