我正在尝试从对象的不一定大小的数组中显示数组列表索引。如何迭代大小不一致的arraylist以防止IndexOutOfBoundsException。
public static void main(String[] args) {
Hello b = new Hello();
System.out.println("test 1 =" +b.Apple().get(0));
System.out.println("test 2 =" +b.Apple().get(1));
System.out.println("test 3 =" +b.Apple().get(2));
}
返回不一致索引列表的结果的Hello.java文件
public ArrayList<Integer> Apple(){
ArrayList<Integer> values = new ArrayList<Integer>();
rs = db.getSM().executeQuery("SELECT a, b, count(*) AS rowCount from table");
while(rs.next()) {
values.add(rs.getInt("count"));
}
return values;
预期结果
首先,它只有2个元素。所以它会打印
test 1 = 23
test 2 = 13
test 3 = 0
第二次运行,它将有3个元素。所以它会打印
test 1 = 23
test 2 = 10
test 3 = 3
答案 0 :(得分:1)
示例解决方案,如果只有两个元素时可以省略test 3 = 0
提及:
for(int index=0; index<yourList.size(); index++) {
Object element=yourList.get(index);
// do something with the element (and its index if needed)
}
for(Object element : yourList) {
//do something with the element
}
Iterator<Object> it = yourList.iterator();
while (it.hasNext()) {
Object element = it.next();
//do something with your element
}
yourList.forEach(element -> /* do something with your element */);
除了第一个提供索引的解决方案外,所有这些解决方案在功能上都是等效的。
不要像我对元素类型那样使用Object
,显然应该使用元素的类型。
要产生当前输出,第一个解决方案似乎最合适,因为它提供了一个索引:
ArrayList<Integer> yourList = b.Apple();
for (int index=0; index < yourList.size(); index++) {
System.out.printf("test %d = %d", index + 1, yourList.get(index));
}
(printf
获取此模板的字符串模板和参数列表;此处%d
表示数字,第一次出现被基于1的索引替换,第二次出现被列表元素的值取代)
如果您不想省略test 3 = 0
输出,我认为Federico klez Culloca建议创建生成器是最好的,但由于我不熟悉它们,我会提供一种解决方案,它将零添加到列表中,直到达到目标大小:
ArrayList<Integer> yourList = b.Apple();
int desiredSize=3;
int missingZeroes = desiredSize - yourList.size();
for(int addedZeroes=0; addedZeroes < missingZeroes; addedZeroes++) {
yourList.add(0);
}
//then proceed with the above List traversal solutions.