我有两个的ArrayList - retrievedList具有15种元素和originalList 3个要素。即,一个是另一个的子集。我比较这两个的ArrayLists检查原始名单的3种元素在retreiveList出现在相同的顺序为好。
基本上,该方法被遍历在retrievedList每个索引和与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),没有工作。
代替I = 0,我试图= -1。不工作。
我想不通的问题,请大家帮忙。
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循环
加入这一行的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);
}
}
计数器== 2之后,在端部即计数器++循环语句将使计数器= 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(计数器)会给arrayIndexOutOfBound例外,因为originalList是大小为3只,但你所要求的第4个指标元素。
如果你只需要比你可以添加限制第一次出现:
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等。为了这个目的,你需要添加的检查。
顺便说一句,你可以使用:int index=Collections.indexOfSubList(list , sublist);
从Collections.indexOfSubList并检查执行情况存在。
在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;
}