【发布时间】:2015-11-17 05:19:29
【问题描述】:
我一直被困在这个IndexOutOfBoundsException 上,我无法弄清楚,我不明白为什么它指向我的while 循环。关于做什么的任何建议?顺便说一句,方法是一个循环调度模拟器,它似乎与我的一个测试文件完美地工作,但不是另一个。
public void roundRobin2(ArrayList<Jobs> c, int startSize)
{
//int n = 0;
double counter = 0;
double compTime = 0;
while(!c.isEmpty())
{
int i = 0;
System.out.println(c);
for(i = 0; i < c.size(); i++)
{
if((c.get(i).jobTime) >= 2)
{
c.get(i).jobTime -= 2;
counter += 2;
if((c.get(i).jobTime) == 0)
{
compTime += counter;
}
}
else
{
(c.get(i).jobTime) -= 1;
counter += 1;
if((c.get(i).jobTime) == 0)
{
compTime += counter;
}
}
//System.out.print("-" + c.get(i).jobName + "-" + counter);
//n++;
//if(n%10 == 0)
//{
//System.out.println("\n");
//}
}
for(i = 0; i < c.size(); i++)
{
while(!c.isEmpty() && (c.get(i).jobTime) == 0)
{
c.remove(i);
}
}
}
System.out.println("\n\nAverage completion times: "+ compTime + "/" + startSize +" = " + ((compTime)/startSize));
}
异常堆栈跟踪:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 7, Size: 7
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at cs431.edu.cpp.Main.roundRobin2(Main.java:143)
【问题讨论】:
-
如果您共享导致错误的输入会容易得多
-
@bumpy 我不这么认为。当您遇到这种错误时,只有越界访问的行很重要。然后,您跟踪用于计算超出范围的索引的变量发生的所有情况,并找出它无效的原因。如果所有内容都以
Collection.size()而不是整数文字表示,则它与输入无关 -
@Dici 如果您不知道输入是什么,您如何跟踪变量的变化?输入是指 ArrayList 中的作业。
-
只有索引很重要,循环中的绑定条件才是我的意思
-
很抱歉删除了您编辑的文本,但这并不像 Stack Overflow 这样的问答风格方面的问题。您可以通过接受正确答案并为好的答案投票(如果您有必要的声誉)来表示您的满意。
标签: java arraylist while-loop indexoutofboundsexception