2016-09-27 139 views
-6

这是我在Java中的第一个大项目。我一直被这个错误困住了好几个小时。我想我因为字符串而犯了一个错误。如果我的代码没有意义,我很抱歉。我正在努力学习我的错误。你能帮我弄清楚我的错误吗?线程“main”中的异常java.lang.NegativeArraySizeException

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

你试图创建一个具有大小为负的数组。这个例外甚至以它的名字命名。 – Kayaman

回答

0

您创建两个长度为noOfAttributes - 1的双打数组。但是,在您创建它们时,noOfAttributes仍为0,因此您收到的尺寸为-1,这是非法的。

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

+0

你会善待纠正吗? – Raj

+0

我给你例外的原因。它是由于业务逻辑问题而发生的。你必须自己修复它。 – xenteros

0

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

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

所以检查noofAttributes值时,它可以为负。

0

您需要明白,首先Java中的数组以第一个索引0开头。

当你写

InfoGain = new double[noOfAttributes-1];

无属性的可最初为0,所以InfoGain会尽量指数-1数组,这将不存在,因此它给你这个例外英寸

尝试使用这个:InfoGain = new double[noOfAttributes];为阵列和基本上它应该工作。

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(); 
相关问题