Javaには、次のように初期化される整数の配列があります。
public int MyNumbers[] = {0,0,0,0};
ただし、配列を可変長のゼロ数に初期化したいと思います。
private int number_of_elements = 4;
public int MyNumbers[] = {0} * number_of_elements; // ????
Java Cから来たのでこれを初めて行う方法がわかりません。何か提案はありますか?
[〜#〜]編集[〜#〜]
for
ループを使用できることは知っていますが、それを行う簡単な方法があることを望んでいます。
int[] myNumbers = new int[size];
Arrays.fill(myNumbers, 0);
http://Java.Sun.com/j2se/1.5.0/docs/api/Java/util/Arrays.html を参照してください。
int[] MyNumbers = new int[number_of_elements];
または、 ArrayList
を使用して、事前にサイズを気にする必要がないようにすることもできます。必要に応じて内部配列を動的に拡張します。
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(0);
numbers.add(2);
// ...
チュートリアルはこちらArrayList
が含まれているCollectionsAPIの詳細をご覧ください。
int[] MyNumbers = new int[number_of_elements];
これはint
の配列であるため、配列要素は0
のJavaのintのデフォルト値を自動的に取得します。
これがInteger
オブジェクトの配列である場合、オブジェクト参照のデフォルト値はnull
であるため、配列を作成した後に配列を埋める必要があります。 Object
配列にデフォルト値を設定するには、次のようにします。
Integer[] MyNumbers = new Integer[number_of_elements];
Java.util.Arrays.fill(MyNumbers, new Integer(0));
もちろん、同じ手法を使用して、int
配列をゼロ以外の値に初期化することもできます。
int[] MyNumbers = new int[number_of_elements];
Java.util.Arrays.fill(MyNumbers, 1);
CのMemsetに似たものを探しているなら、私はそれがないと思います。 Javadocを見ると、Arrays.fillの実装はforループと同じように見えます。
しかし、同じ質問について説明しているこの記事に出くわしました http://www.searchenginecaffe.com/2007/03/how-to-quickly-reset-value-of-Java.html 表示されますsystem.arraycopyを使用することがより良い解決策であり、これが使用できる関数です(リンクからコピー)
public static void bytefill(byte[] array, byte value) {
int len = array.length;
if (len > 0)
array[0] = value;
for (int i = 1; i < len; i += i) {
System.arraycopy( array, 0, array, i, ((len - i) < i) ? (len - i) : i);
}
}