第4回 配列(1年次の復習) |
※画像が大きすぎるときは,ブラウザの縮小を使って下さい(通常のWindows用Webブラウザの場合,コントロールキーを押しながら - キーを押すと縮小,コントロールキーを押しながら + キーを押すと拡大です)。
【配列】
●配列とは
・ 配列とは,同じデータ型の変数が集まった集合体であり,多数のデータを記憶・管理・処理するのに便利で不可欠なものである(下図)。
●配列の宣言
・それでは,配列の宣言方法を紹介しよう。形としては下図(1)-(a)と(1)-(b)の二種類有るがやっていることは同じである。
・そして,下図下部の解説のとおり,なんと配列の宣言だけでは完全な配列を作ったことにはならないのだ。
●配列本体の生成方法
・配列本体の生成は,new 演算子という特別な演算子で行う。使い方は下図を参照。
【参考情報】厳密に言うと,「代入」と「初期化」は同じものではないのだが,ここでは初心者用に同じものとして説明している。
・なお,配列本体を生成するときに,最初から各要素に入っている値(初期値)を指定できる(下図参照)。
●配列の利用方法
・配列の各要素を個別の変数として利用するには
配列変数名[ インデクス値 ]
と書けば良い(下図参照)。
・配列の長さ(要素数)を知ることは,配列を扱う上で重要である。
配列の長さは,下図のように特別
方法で知ることが出来る。
・特に,次の様に,状況によって配列変数の参照している配列本体が異なっている可能性があり, length の値もそれに応じて変わることに注意しよう
ArrayLength.java
●配列の使用例
では,配列のサンプルプログラムを紹介するのに最低限必要な知識を紹介したので,実際に配列を使ったサンプルプログラムを示そう。
下の例は,今までの配列に関する知識の再確認することを目的としたものなので,これ自体が意味を持っているプログラムというわけでは無いので注意。
なお,メソッド printIntArray( )は,仮引数に配列型変数を持っており,受け取った配列を処理する。配列を受け取るメソッドの書き方の参考にせよ。
Array1.java
※ printIntArray( )メソッドの仮引数aにおいても,受け取った実引数の配列によって a.length の値は変わることも再確認しよう。
・この例でもわかるように,配列はfor文と相性が良い。配列内の全要素を処理する典型的なパターンを下図に示す。
【参考情報】実は,最近のJavaでは,配列などでもう少し楽に書ける拡張for文(for-each文)が使えるようになっているのだが,ここでは割愛する。拡張for文については後期の「プログラミング応用b」で紹介する予定。
●無効なインデックス値
・要素を5個持つ配列の場合,有効なインデックス番号の値は,0, 1, 2, 3, 4 の合計5個である。
・一般的に言えば,配列の要素数を n とすれば,有効なインデックス値は 0 〜 n-1 ということになる。
・よくある間違いとしては,要素数が5の配列では,インデックス値5を使ってしまう例がある。注意しよう。
・もし,無効なインデックス値を使って配列の要素へアクセスしようとすると,プログラム実行時にエラーになる(下のサンプルプログラム参照)。
BadIndex.java
・有効なインデックス値の範囲を知るために,前述した length変数を使おう。aという名前の配列変数があった場合,有効なインデックス値は 0 〜 (a.length-1) である。
【データ型の分類】
●プリミティブ型と参照型の性質
RefTest.java
※ガベージコレクション
Javaでは,newで生成された「配列本体」と「オブジェクト本体」
が,どの変数からも参照されなくなると,自動的に消滅し,使用されていたメモリが解放されるようになっている。
これを,ガベージコレクション(ゴミ集め)と言う。
●mainメソッドの引数
MainArgs.java
●文字列クラスString
StringTest.java