线程“main”中的异常java.lang.NegativeArraySizeException

时间:2016-09-27 13:07:06

标签: java arrays csv compiler-errors java-8

这是我在Java中的第一个大项目。我已经被这个错误困住了这么多个小时。我假设因为字符串我犯了一个错误。如果我的代码毫无意义,我道歉。我正在努力学习我的错误。你能帮我解决一下我的错误吗?

    InfoGain = new double[noOfAttributes];  
    GainRatio = new double [noOfAttributes];
    findUnique();

4 个答案:

答案 0 :(得分:0)

您创建了两个长度为noOfAttributes - 1的双精度数组。但是,在您创建它们时,noOfAttributes仍为0,因此您收到的大小为-1是非法的。

看,你在条件表达式中设置了noOfAttributes。如果您没有输入if-statement,那么它将为0。

答案 1 :(得分:0)

大小为0的数组是可能的,但不是负大小

int []x=new int[0];     //this is possible.
int []x=new int[-4];   // this is not possible

所以检查 noofAttributes 值,它可能是负数。

答案 2 :(得分:0)

首先需要了解Java中的数组以0作为第一个索引。

写作时

InfoGain = new double[noOfAttributes-1];

没有属性最初可以为0,因此InfoGain将尝试在数组中对-1进行索引,这不会存在,因此它会为您提供此异常。

尝试对这两个数组使用InfoGain = new double[noOfAttributes];,基本上它应该可以工作。

答案 3 :(得分:0)

您可以使用简单的if-else条件解决上述错误,如下所示:

if(noOfAttributes > 0){
     InfoGain = new double[noOfAttributes];  
     GainRatio = new double [noOfAttributes];
}
else{
     InfoGain = new double[INITIAL_VALUE];  
     GainRatio = new double [INITIAL_VALUE];
}
findUnique();