Arraylist:索引超出范围的异常

时间:2019-01-26 11:06:39

标签: java testng indexoutofboundsexception

我有两个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循环中没有“ =”

4 个答案:

答案 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;   
    }