Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

配列に順々に代入

私はjavaを先日始めたばかりでjavaの配列の扱いがまだよく分かっていません
配列の最後に要素を代入したい場合どうすればいいのでしょうか?
(phpでいう$test_array[] = 64;のように配列に順々に格納したい)
javaでint型の配列を宣言したとすると
int[] hoge = new int[10]; ※ローカル変数
配列hogeは[0]~[9]まで0が初期値として代入されていると思います
ここに範囲を越さない複数回数この配列に正の値を代入したい
つまり[0]~[9]のうち最初のhoge[n]==0の場所に代入したい場合
なにかスマートな記述方法
もしくは同様に配列を順々に格納できる他の方法があるのであれば
どうかお教えください

4

回答

6186

閲覧

4件の回答

評価

0

>配列の最後に要素を代入したい場合どうすればいいのでしょうか?
phpの配列の実装はハッシュテーブルです。だからそんな芸当ができる。
質問者さんも書いてる通り、Java の場合は、たとえば int の配列なら全部 0 で初期化されてます。
なので、配列のこの部分まで値を代入したって概念自体がないからスマートな記述方法は用意されていません。

>同様に配列を順々に格納できる他の方法があるのであればどうかお教えください
たとえば、List 使えば、こんな感じには書けるけど、Integer クラス使うことになるから、primitive に戻すのは面倒です。Apache Commons の ArrayUtils 使えば一発ですが。

List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
    list.add(i);
}
System.out.println( Arrays.toString(list.toArray(new Integer[10])));

評価

0

Javaの配列は、Cの配列をクラスでラップしたようなもので、決まり切ったことにしか使わない前提なんだよね。
インデックスアクセスしたいなら、nをグローバルに保持して自分で管理するしかない。

hoge[n]=x;
if(x!=0)n++;
のように。

融通を利かせたいなら、既に書かれてるようにListを使うのがセオリー。
まあ、実装クラスがArrayListなら、中身は結局配列なんだけど。

Listを増減させないで良いなら、

List<Integer>list=Arrays.asList(1,2,3,4,5,6,7,8,9,10);

というのもアリ。

評価

0

いや、
if(x!=0)hoge[n++]=x;
で十分だな。

評価

0

>配列を順々に格納できる他の方法
Java8なら
        int[] test = new int[100];
        Arrays.setAll(test, i -> i + 1); // 1 to 100
        // Arrays.setAll(test, i -> 200 - i * 2); // 200 to 2 step by 2
        // Arrays.setAll(test, i -> (int) (Math.random() * 100)); // random value about 0 to 99
        Arrays.stream(test).forEachOrderd(v -> System.out.println(v)); // show values of array
等と書ける
昇順値だろうが降順値だろうが乱数だろうが
生成関数次第で如何様にも

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。