当我测试下面的代码时,它运行良好的一个数据集,但当我用另一个数据集测试它时,它给了我这个线程
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)
我在这个网站上搜索了所有匹配的案例,但实际上我找不到答案。
答案 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测试将有助于理解类的状态,并可能允许进行检查以防止该状态。在一天结束时,我预计至少有三件事情中的一件将成为罪魁祸首:
希望有所帮助。