我在线程“主” 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());
}
答案 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