2017-02-25 21 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のサイズで初期化されることにつながります。 – Kushan

答えて

0

まず、Testクラスにパラメータ化されたコンストラクタはありません。 new Test(2);

第2に、グローバルに初期化しますint []ma = new int[arraySize]; このとき、値0の配列サイズです。あなたはarrayS値によって

+0

残念ながら、ここに書き込む間に少しのエラーがありましたが、コンストラクタはそこに存在するはずです。 –

0

arraySizeの値を設定した後

は、配列サイズが静的インスタンス変数であるので、あなたのプログラムが起動されたとき、それは0に初期化されますので、MAが0の大きさを持っているあなたのコンストラクタでma=new int[arraySize];を入れてあなたがミリアンペアにアクセスしたときに[0]あなたがそれを解決するには、エラー

を得る理由です、あなたは、コンストラクタで

static private int arraySize; 
    public Test(int arrayS){ 
     arraySize = arrayS; 
     ma = new int[arrayS]; 
    } 
    int []ma; 
をミリアンペアを初期化する必要が

0

arraySizeとmaをインラインで初期化します。したがって、arraySizeは0(NULLではない)で初期化され、次に配列は0の容量で初期化されます。コンストラクタ内で配列を初期化する必要があります。

関連する問題