2016-09-27 136 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(); 
相關問題