##今回の内容
前回は,プログラミングの最重要要素の1つであるfor文についてでした.
今回は,一次元配列というデータ構造について,学習していきます.
##一次元配列とは
生徒のテストの点数をプログラム上で書くとするなら,どのように書くでしょう?
int suzuki = 90;
int tanaka = 62;
int nakata = 78;
...
生徒が少なければいいですが,1クラス40人全員のテストの点数を別々の変数で用意すると,とても面倒に感じます.
そこで利用するのが,一次元配列です.
配列は同じ性質のもの(今回ならばテストの点数)が集まった行列,のようなものと考えるといいと思います.
一次元配列は行列なので,1つの変数に見えるのに,複数の要素をもちます.
要素を取り出すときは,○○という配列の✕✕番目,というような取り出し方をします.
わかりにくいので,図にするとこんな感じ.
##構文
配列の宣言の方法はいくつかあります.
int hoge[]; // int[] hoge;と書いてもいい
hoge = new Int[要素数];
// 1行で
int hoge[] = new Int[要素数];
// 宣言と同時に代入
int hoge[] = {要素1, 要素2, 要素3};
int(Int)の部分をdouble(Double)やStringに変えることで,それぞれのデータ型の配列を宣言することができます.
こういうのやってると型推論言語のほうが楽だな,ってなってきます…
javaの配列は,宣言のときに要素数を決めたら,増やしたり減らしたりできないので,めっちゃ不便です.
ArrayListというものを使うと配列のような構造で要素数を増やしたり減らしたりできますが,その話はまた今度…
##要素を取り出す
配列の中の要素を取り出すには,何番目の要素を取り出すか,指定します.
このとき,要素の番号は0番目から始まることに注意します.
int[] hoge = {4, 8, 2, 3, 9, 7, 6};
// 0 1 2 3 4 5 6 番目
// 2 を取り出す
System.out.println(hoge[2]);
// 9 を取り出す
System.out.println(hoge[4]);
##要素数を得る
要素数はjavaが勝手に数えてくれています.
int[] hoge = {4, 8, 2, 3, 9, 7, 6};
// hoge の要素数を出力
System.out.println(hoge.length);
要素数と要素の番号の違いに注意です.
例の配列の要素番号の最大は6ですが,要素数は7です.
この違いをうまく使うことでスマートなプログラムに近づきます.(と僕は思います.)
##forと組み合わせる
配列とfor文を組み合わせてこんなことができます.
int[] hoge = {4, 8, 2, 3, 9, 7, 6};
// 0 1 2 3 4 5 6 番目
for (int i = 0; i < hoge.length; i++) { // 要素数は7なので,i < 7
// i 番目の要素を出力
System.out.println(hoge[i]);
}
ここで,前回説明できなかった拡張for文が登場します.
int[] hoge = {4, 8, 2, 3, 9, 7, 6};
for (int x : hoge) { // 拡張for文
System.out.println(x);
}
拡張for文は,hogeの部分に指定された配列から,1つずつ要素を取り出して,xに代入する,という文です.
ループ条件を指定しなくても,配列の要素の数だけ繰り返します.
また,カウンタも必要ありません.
簡潔に書けて綺麗だと思いませんか?
for文を使うときは,大抵拡張for文でできるような使い方をするので,普通のfor文は余り使いません.
Pythonではそもそも基本のfor文が拡張for文ですし…
##おわり
配列を使うことで,変数の幅が広がって,できることが増え,綺麗にプログラムが書けるようになった気がしませんか?
(実際に配列を使うかどうかという話は別として…)
今回は一次元配列でしたが,次回は次元の壁をぶち破ります(?)