我有一个程序,其中我创建了一个ArrayList来存储一些出租车对象。我一直收到一个错误消息,说Java无法识别ArrayList中是否有对象。这是我得到的错误信息:
异常线程“main”java.lang.IndexOutOfBoundsException:索引:20,大小:20 在java.util.ArrayList.rangeCheck(未知来源) 在java.util.ArrayList.get(未知来源) 在edu.Tridenttech.MartiC.app.CabOrginazer.main(CabOrginazer.java:48)
这是我正在尝试使其工作的代码。
异常线程“main”java.lang.IndexOutOfBoundsException:索引:20,大小:20 在java.util.ArrayList.rangeCheck(未知来源) 在java.util.ArrayList.get(未知来源) 在edu.Tridenttech.MartiC.app.CabOrginazer.main(CabOrginazer.java:48)
这是我正在尝试使其工作的代码。
public class CabOrginazer {
private static List<CabProperties> cabs = new ArrayList<CabProperties>();
private static int count = 0;
private static boolean found = false;
public void cabOrginazer()
{
}
public static void main(String[] args) {
// TODO Auto-generated method stub
CabRecordReaper reaper = new CabRecordReaper("C:/CabRecords/September.txt");
CabProperties cabNum;
for(int i = 0; i < 20; i++)
{
cabNum = new CabProperties();
cabs.add(cabNum);
}
while(reaper.hasMoreRecords())
{
CabRecord file = reaper.getNextRecord();
for(int j = 0; j < cabs.size(); j++)
{
if(cabs.get(j).getCabID() == file.getCabId())
{
found = true;
cabs.get(j).setTypeAndValue(file.getType(), file.getValue(), file.getPerGallonCost());
cabs.get(j).setDate(file.getDateString());
break;
}
}
if(found == false)
{
cabs.get(count).setCabId(file.getCabId());
count++;
}
/*for(CabProperties taxi : cabs)
{
if(taxi.getCabID() == file.getCabId())
{
found = true;
taxi.setTypeAndValue(file.getType(), file.getValue(), file.getPerGallonCost());
taxi.setDate(file.getDateString());
break;
}
}*/
}
for(CabProperties taxi : cabs)
{
System.out.print("cab ID: " + taxi.getCabID());
System.out.print("\tGross earning: " + taxi.getGrossEarn());
System.out.print("\tTotal Gas Cost: " + taxi.getGasCost());
System.out.print("\tTotal Service Cost: " + taxi.getServiceCost());
System.out.println();
}
}
}
第48行 是if语句的内部,其中包含cabs.get(count).setCabId(file.getCabId());
。根据我对Java的了解,Java应该知道cabs
中有元素,并且我应该能够设置出租车的id
。是什么原因导致Java无法识别ArrayList已填充呢?