当我测试下面的代码时,它在一个数据集中运行良好,但是当我用另一个数据集测试它时,它给了我这个线程。
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)我在这个网站上搜索了所有匹配的案例,但是我真的没有找到我的答案。
发布于 2017-02-15 06:07:44
更新
FeatureConstruction在分类方面存在逻辑错误。您假设参数“培训”中的元素不超过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(位置)之间存在一个隐含的依赖关系,这是不满意的。
我猜想问题扩展了FeatureConstruction,这个问题与问题实现和父类之间的状态管理和期望有关。
我建议检查调用堆栈中的变量,直到FeatureConstrction.classify()。确定与该特定调用相关的问题的状态,并构建一个JUnit测试来复制该条件。这可以帮助隔离问题和加速测试修改以纠正。
Junit测试将有助于理解类的状态,并可能允许进行检查以防止出现这种状态。最后,我预计至少有三件事会是罪魁祸首:
希望这能有所帮助。
发布于 2017-02-15 03:58:18
尝试对循环条件使用p_i.getSize() - 1;。
您似乎正在循环执行0,1,2,因为大小将返回2,但是数组只包含0,1。
https://stackoverflow.com/questions/42240366
复制相似问题