接收错误(IndexOutOfBoundsException)时其数组列表中的对象数量较多

时间:2016-12-06 14:33:17

标签: java arrays indexoutofboundsexception

我知道这是一个常见的问题,我已经阅读了一些帖子,但还是找不到错误的根本原因。

我有从json文件获取参数的设备,代码为这些设备生成拓扑。 我有一个微微网(小主从组)的列表,问题是代码工作得很好,最多45个设备。当我增加设备数量时,我得到以下错误;

loadmat

弹出的位置;

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at KTHBleMesh.BleMeshDevice.construct(BleMeshDevice.java:508)
    at KTHBleMesh.BleMeshDevice$2.run(BleMeshDevice.java:468)
    at KTHBleMesh.Event.run(l2.java:21)
    at KTHBleMesh.Simulator.doAllEvents(l2.java:50)
    at KTHBleMesh.IteratorEngine.main(IteratorEngine.java:85)

` getDevPiconet()。get(0)给出错误,这里是类代码,

List<BleMeshDevice> neighboringDevices =this.getTxManager().getNeighbouringDevices(this);
                for (BleMeshDevice neighDevice : neighboringDevices) {
                    if (neighDevice.devMiddleware.getTopologyCtrlBlock().getDevPiconet().get(0).getDevRole()==1) 

看起来它失败了,因为DevPiconet是空的,但它适用于其他数量的设备...我不明白为什么它在设备数量增加时无效。

如果您有任何线索或建议,请告诉我,

提前致谢,

BR

1 个答案:

答案 0 :(得分:0)

首先,为了防止异常,你应该检查你的Piconet的空指针和数组大小,而不是检查第一个项目dev角色的值:

if (neighDevice.devMiddleware.getTopologyCtrlBlock().getDevPiconet().get(0).getDevRole()==1)

首先检查数组是否为空,并且他的大小超过0:

if (neighDevice.devMiddleware.getTopologyCtrlBlock().getDevPiconet() !=  null && neighDevice.devMiddleware.getTopologyCtrlBlock().getDevPiconet().size() > 0 &&  neighDevice.devMiddleware.getTopologyCtrlBlock().getDevPiconet().get(0).getDevRole()==1)

这样你只检查有效值。

关于设备编号问题,它与业务逻辑有关,需要更多关于您正在做什么的信息来确定