Javaで配列を初期化する方法は?


434

私はこのような配列を初期化しています:

public class Array {

    int data[] = new int[10]; 
    /** Creates a new instance of Array */
    public Array() {
        data[10] = {10,20,30,40,50,60,71,80,90,91};
    }     
}

NetBeansは次の行でエラーを示しています。

data[10] = {10,20,30,40,50,60,71,80,90,91};

どうすれば問題を解決できますか?


3
「int data [] = new int [10]」を「int data []」に置き換えることができます。あなたはそこでメモリを浪費しています。
missingfaktor、2009

回答:


642
data[10] = {10,20,30,40,50,60,71,80,90,91};

上記は正しくありません(構文エラー)。これはdata[10]、要素のみを保持できる配列を割り当てていることを意味します。

配列を初期化する場合は、配列初期化子を使用してみてください。

int[] data = {10,20,30,40,50,60,71,80,90,91};

// or

int[] data;
data = new int[] {10,20,30,40,50,60,71,80,90,91};

2つの宣言の違いに注意してください。宣言した変数に新しい配列を割り当てる場合newは、使用する必要があります。

あなたは構文を修正しても、アクセスがdata[10](あなたが唯一のアクセスができ、まだ間違っているdata[0]data[9]、Javaの配列のインデックスがあるため、0ベース)。アクセスdata[10]するとArrayIndexOutOfBoundsExceptionがスローされます


2
実際、これが正しくない主な理由は、構文エラーであるということです。AIOBは、構文が許容できる場合にのみ発生します。
スティーブンC

1
私にこのような配列を宣言し、public static void product(int[] array){ int[] productArray = new int[array.length];すべての値をproductArray ゼロに設定したい場合、私を助けていただけませんか?(私はループを作成してすべての値をゼロに設定する必要があると思います。これを行うためのより良い方法はありますか?)
ヘンガメ

2
@ヘンゲーム:デフォルトでは0に初期化されています。stackoverflow.com/a/2154340/1000655を
Neal Gokli

39

試す data = new int[] {10,20,30,40,50,60,71,80,90,91 };


1
+1。余分な開きブレースがあります。次のように書くこともできます:data [0] = 10; data [1] = 20; .... int data [] = new int [10]の後ですが、コードが多すぎるため、同じことをしてしまいます。
Hamish Grubijan、2009

28

サイズ10の配列を作成すると、10個のスロットが割り当てられますが、0から9です。このforループは、それが少し良くなるのを助けるかもしれません。

public class Array {
    int[] data = new int[10]; 
    /** Creates a new instance of an int Array */
    public Array() {
        for(int i = 0; i < data.length; i++) {
            data[i] = i*10;
        }
    }
}

16

できるよ:

int[] data = {10,20,30,40,50,60,71,80,90,91};

3
5年前から受け入れられた回答に加えて、これがどのような価値を追加するのかと思います。
TylerH

12

構文

 Datatype[] variable = new Datatype[] { value1,value2.... }

 Datatype variable[]  = new Datatype[] { value1,value2.... }

例:

int [] points = new int[]{ 1,2,3,4 };

8

非公式のウェブサイトを学ぶのではなく、オラクルのウェブサイトから学ぶ

リンクは次のとおりです:ここをクリック

*完全な説明付きの初期化と宣言を見つけることができます*

int n; // size of array here 10
int[] a = new int[n];
for (int i = 0; i < a.length; i++)
{
    a[i] = Integer.parseInt(s.nextLine()); // using Scanner class
}

入力:10 //アレイサイズ10 20 30 40 50 60 71 80 90 91

データの表示:

for (int i = 0; i < a.length; i++) 
{
    System.out.println(a[i] + " ");
}

出力: 10 20 30 40 50 60 71 80 90 91


3

そのような配列を初期化することはできません。他の人が提案したことに加えて、次のことができます。

data[0] = 10;
data[1] = 20;
...
data[9] = 91;

3

コンストラクタで配列を初期化したい場合、そのような配列初期化子は使用できません。

data= {10,20,30,40,50,60,71,80,90,91};

に変更するだけです

data = new int[] {10,20,30,40,50,60,71,80,90,91};

上記のようにdata[10] = new int[] { 10,...,91} プロパティ/フィールドを宣言しint[] data;て初期化するだけでサイズを指定する必要はありません。コードの修正バージョンは次のようになります。

public class Array {

    int[] data;

    public Array() {
        data = new int[] {10,20,30,40,50,60,71,80,90,91};
    }

}

ご覧のとおり、ブラケットは空です。初期化とそのサイズは中括弧の間の要素の数によって指定されるため、大括弧の間のサイズを指定する必要はありません。


2

配列の10番目の要素を配列に設定しようとしています

data = new int[] {10,20,30,40,50,60,71,80,90,91};

FTFY


0

多分これはうまくいくでしょう:

public class Array {

    int data[] = new int[10]; 
    /* Creates a new instance of Array */
    public Array() {
        data= {10,20,30,40,50,60,71,80,90,91};
    }
}

6
これは質問とどう違うのですか?答えを広げてください!
Alexander Vogt

2
配列初期化子はコンストラクターでは使用できません!!!! 提案を投稿する前に、少なくともテストする必要があります...
Sedat Kilinc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.