2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

java学び直しメモ part5 ~一次元配列~

Posted at

##今回の内容
前回は,プログラミングの最重要要素の1つであるfor文についてでした.

今回は,一次元配列というデータ構造について,学習していきます.

##一次元配列とは
生徒のテストの点数をプログラム上で書くとするなら,どのように書くでしょう?

TestPoint.java
int suzuki = 90;
int tanaka = 62;
int nakata = 78;
...

生徒が少なければいいですが,1クラス40人全員のテストの点数を別々の変数で用意すると,とても面倒に感じます.

そこで利用するのが,一次元配列です.
配列は同じ性質のもの(今回ならばテストの点数)が集まった行列,のようなものと考えるといいと思います.
一次元配列は行列なので,1つの変数に見えるのに,複数の要素をもちます.
要素を取り出すときは,○○という配列の✕✕番目,というような取り出し方をします.
わかりにくいので,図にするとこんな感じ.

変数配列.PNG

##構文
配列の宣言の方法はいくつかあります.

ArrayStatement.java
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番目から始まることに注意します.

GetElement.java
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が勝手に数えてくれています.

GetElementNum.java
int[] hoge = {4, 8, 2, 3, 9, 7, 6};

// hoge の要素数を出力
System.out.println(hoge.length);

要素数と要素の番号の違いに注意です.
例の配列の要素番号の最大は6ですが,要素数は7です.
この違いをうまく使うことでスマートなプログラムに近づきます.(と僕は思います.)

##forと組み合わせる
配列とfor文を組み合わせてこんなことができます.

ArrayAndFor.java
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文が登場します.

ExtendFor.java
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文ですし…

##おわり
配列を使うことで,変数の幅が広がって,できることが増え,綺麗にプログラムが書けるようになった気がしませんか?
(実際に配列を使うかどうかという話は別として…)
今回は一次元配列でしたが,次回は次元の壁をぶち破ります(?)

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?