ArrayList的:索引出界异常

问题描述 投票:-1回答:4

我有两个的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循环

java testng indexoutofboundsexception
4个回答
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);
    }
}

0
投票

计数器== 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个指标元素。


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等。为了这个目的,你需要添加的检查。 顺便说一句,你可以使用:int index=Collections.indexOfSubList(list , sublist);Collections.indexOfSubList并检查执行情况存在。


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;   
    }
© www.soinside.com 2019 - 2024. All rights reserved.