六条错误消息" main" java.lang.ArrayIndexOutOfBoundsException:2

时间:2017-02-15 03:47:54

标签: java indexoutofboundsexception

当我测试下面的代码时,它运行良好的一个数据集,但当我用另一个数据集测试它时,它给了我这个线程

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
    at psofc2.FeatureConstruction.classify(FeatureConstruction.java:192)
    at  pofc2.FeatureConstruction.calacc_binary(FeatureConstruction.java:180)
    at psofc2.FeatureConstruction.getOp(FeatureConstruction.java:97)
    at psofc2.FeatureConstruction.fitness(FeatureConstruction.java:44)
    at psofc2.Swarm.iterate(Swarm.java:87)
    at psofc2.Main.main(Main.java:160)

我在这个网站上搜索了所有匹配的案例,但实际上我找不到答案。

2 个答案:

答案 0 :(得分:0)

尝试使用p_i.getSize() - 1;作为循环条件。
你好像是在循环0,1,2,因为size会返回2,但是数组只包含0,1。

答案 1 :(得分:0)

更新

FeatureConstruction在分类中有逻辑错误。您假设参数' training'其中不超过2个元素。

   public double classify(Dataset training, Dataset testing) {
        // initial the threshold and two classes
         Object[] clzz = new Object[training.classes().size()]; // <--- Init the array to the size of training
        int index = 0;
        for (Object o : training.classes()) {
            clzz[index] = o; //<-- Now everything in training has a place to be.
            index++;
        }

从堆栈跟踪中,您提供的问题在您班级的第87行初始化;但是,异常是从同一个包中的类 FeatureConstruction 的第192行抛出的。似乎在不满足的Particle.getPosition()和Problem.fitness(position)之间存在隐含的依赖关系。

我猜想问题扩展了 FeatureConstruction ,而且问题与状态管理和问题实现与父类之间的期望有关。

我建议检查调用堆栈中的变量,直到FeatureConstrction.classify()。确定问题的状态与特定调用的相关性,并构建JUnit测试以复制条件。这有助于隔离问题并加快测试修改以纠正。

Junit测试将有助于理解类的状态,并可能允许进行检查以防止该状态。在一天结束时,我预计至少有三件事情中的一件将成为罪魁祸首:

  1. FeatureConstruction在分类函数中存在逻辑问题。
  2. 问题(假设FeatureConstruction的扩展)不考虑父类的状态,并且缺少某种初始化或更新调用以保持父数据模型同步。
  3. 在一种情况下,控制问题和粒子之间依赖关系的过程存在逻辑错误,并且设置错误配置了数据关联。
  4. 希望有所帮助。