2017-02-25 50 views
-3

我最近一直在研究一些Java代碼,看起來像被卡住了。Java ArrayIndexOutOfBounds對於不應該關閉的數組的錯誤

這裏是我的代碼:

public class Test { 

    static private int arraySize; 
    public Test(int arrayS){ 
     arraySize = arrayS; 

    } 
    int []ma = new int[arraySize]; 
    public static void main(String[] args){ 


    } 
    public void increment(){ 
    int count = arraySize - 1; 
    ma[count - 1] += 1; 
    while(count!= 0){ 
     if(ma[count] > 9){ 
      ma[count] =0; 
      ma[count - 1] +=1; 
     } 
    count -=1; 
     } 
    if(ma[0] > 9){ 
    ma[0] = 0; 

    } 

    } 

    } 




class Trial 
{ 
    public static void main(String[] args) 
    { 
    Test z = new Test(2); 
    System.out.println(z); 

    z.increment(); 
    System.out.println(z); 

} 
} 

此行特別是:ma[count - 1] += 1;

不斷去出界每當審判試圖牛逼構建它的某些原因。我不斷收到此錯誤:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

我真的很感謝你能抽出因爲我似乎無法找到任何理由,爲什麼這陣會去關閉邊界的任何幫助。我的謝意。

+1

在此處發佈您的代碼 – Kaushal28

+0

Theres很多缺少代碼好友...請將整個代碼放在一起,以便我們可以嘗試並理解例如您的Test構造函數丟失 – Kushan

+0

在構造函數中指定數組。我認爲這個問題是由於靜態大小以及之前被初始化而發生的。這很大程度上導致數組初始化爲0 0 – Kushan

回答

0

首先,Test類中沒有任何參數化的構造函數。您使用new Test(2);

如何創建對象其次,你在全球int []ma = new int[arraySize]; 初始化這次ARRAYSIZE具有零值。

ma=new int[arraySize];在構造函數後,您可以通過arrayS值設置的arraySize

+0

對不起,在寫這裏時出現了一些錯誤,現在構造函數應該在那裏。 –

0

由於ARRAYSIZE是一個靜態實例變量,它會在你的程序啓動,因此馬的大小爲0初始化爲0

這就是爲什麼當你訪問MA [0]你會得到一個錯誤

要解決它,你需要在你的構造函數初始化馬

static private int arraySize; 
    public Test(int arrayS){ 
     arraySize = arrayS; 
     ma = new int[arrayS]; 
    } 
    int []ma; 
0

您初始化arraySize和ma inline。所以arraySize被初始化爲0(不是NULL),然後你的數組被初始化爲0的容量。你應該在構造函數中初始化你的數組。