数组越界以进行数组列表比较

时间:2018-11-05 02:51:08

标签: java

我在线程“主” java.lang.IndexOutOfBoundsException中得到以下错误异常:索引:5,大小:5

for(int i=0;i<list.size();i++)
        {
            if(cmp(volume.get(i),volume.get(i+1))>0)
            {
                sorted[i]=list.get(i);
            }
            else 
            {
                sorted[i]=list.get(i+1);
            }
            System.out.println(sorted[i].toString());   
        }

3 个答案:

答案 0 :(得分:1)

这将意识到您的工作超出范围

if(list.size() == 1){
    //handle case the list only contain one element here
} else {
    for(int i=0; i < list.size()-1; i++) { //<===list.size()-1
    ...
        if(list.size() == i+1) {
            //handle final loop here (System.out.println(list[i+1]))
        }
}

编辑

list.size()为1时,您的作品将再次具有IndexOutOfBoundsException

如果要打印所有值,应检查最新的循环并打印出值,或者可以等到所有循环完成后再将其打印出。

编辑#2

更新代码

答案 1 :(得分:0)

替换

list.size();

list.size()-1;

list.size();返回列表的长度。想象list.size()返回5。第一次循环时,列表​​中的索引值为0。但是最后,我变成5,列表中没有索引5。

答案 2 :(得分:0)

问题是当i = list.size()-1时,您尝试访问list.size()处的元素,这会导致异常。

for(int i=0;i<list.size();i++) //<----------problem 
        {
            if(cmp(volume.get(i),volume.get(i+1))>0) //<----------problem 
            {
                sorted[i]=list.get(i);
            }

只需将for(int i=0;i<list.size();i++)更改为for(int i=0;i<list.size()-1;i++)

要打印所有Strings,只需在for循环后添加一条附加语句。

for(int i=0;i<list.size()-1;i++)
        {
            if(cmp(volume.get(i),volume.get(i+1))>0)
            {
                sorted[i]=list.get(i);
            }
            else 
            {
                sorted[i]=list.get(i+1);
            }
            System.out.println(sorted[i].toString());   
        }

  System.out.println(sorted[list.size()-1].toString());  //<----to print the last String