我有两个arraylists-15个元素的retriedList和3个元素的originalList。即一个是另一个的子集。我正在比较这两个数组列表,以检查原始列表的3个元素在retreiveList中是否也以相同的顺序出现。
基本上,该方法循环遍历RetrivedList中的每个索引,并与originalList进行比较,当找到匹配项时,计数器将递增。如果计数器大小与originalList大小相同,则测试通过,否则失败。
现在,我得到的错误是java.lang.IndexOutOfBoundsException:索引:3,大小:3
我不确定为什么该方法检索索引(3)以及如何停止该索引!
我做了一个sysOut计数器,它给出了输出0 0 0 0 0 0 0 1 2 3 这告诉我(i)计数器已增加到3。(ii)循环了10次,而应该循环了15次。
我尝试在if-else语句之后结束for循环。.它不能正常工作..仅循环了一次。
我试图中断if语句,以防止它进入索引(3),但没有用。
我尝试了int = -1,而不是i = 0。努力工作。
我无法解决问题,请帮忙。
try{
int counter = 0;
for(int i=0; i<retrievedList.size(); i++, ++counter){
if(retrievedList.get(i).equals(originalList.get(counter))){
System.out.println(counter);
}
} //for loop closed
if(counter==originalList.size()){
Assert.assertTrue(true, "Arrays are in Order" - Test Passed!)
}else{
Assert.assertTrue(false, "Arrays are not in Order" - Test failed!)
}
} catch (Exception e){
logger.error("test for components has failed");
e.printStackTrace();
}
我在for循环中没有“ =”
答案 0 :(得分:1)
将此行添加到for循环中。
for(int i=0; i<retrievedList.size(); i++){
if(retrievedList.get(i)==(originalList.get(counter))){
counter++;
if(counter == originalList.size())
break;
System.out.println(counter);
}
}
答案 1 :(得分:0)
在counter == 2之后,在循环的末尾声明,即counter ++将使counter = 3,然后在此情况下
for(int i=0; i<retrievedList.size(); i++){
if(retrievedList.get(i).equals(originalList.get(counter))){
counter++;
System.out.println(counter);
}
将再次执行该时间计数器将为3的操作,因此originalList.get(counter)将给出arrayIndexOutOfBound异常,因为originalList的大小仅为3,但是您要求的是第四个索引元素。
答案 2 :(得分:0)
如果只需要第一个匹配项,则可以添加限制:
for(int i=0; i<retrievedList.size(); i++){
if(retrievedList.get(i).equals(originalList.get(counter)) && counter < 3){
counter++;
System.out.println(counter);
}
但是想法是您需要测试不同的场景。例如,当目标列表包含1,2,3且输入包含1、2、4、1、2、3等时。为此,您需要添加支票。
顺便说一下,您可以使用:Collections.indexOfSubList中的int index=Collections.indexOfSubList(list , sublist);
并在那里检查实现。
答案 3 :(得分:0)
在for
循环中,您循环访问retrievedList
,如果找到了originalList
的3个项目并将counter
设置为3
,则仍继续
因此下一个比较将与引发错误的originalList.get(3)
进行比较。
在break
循环中添加一个for
语句以终止它
当找到所有项目时,表示counter = 3
:
for(int i=0; i<retrievedList.size(); i++){
if(retrievedList.get(i).equals(originalList.get(counter))){
counter++;
System.out.println(counter);
}
if(counter==originalList.size())
break;
}