配列の基本
配列とは?
いくつかの関係あるデータをグループにして、まとめて1つの変数に入れること
また、そうすることで、
きちんとした構造に整理して、後から特定の値を取り出すことが出来る
配列のイメージ・・・0から番号がついた箱が並んでいて、その箱1つ1つにデータを入れていく→その並んだ箱を1つのまとまりとして扱うことが出来るので便利!
[0][1][2][3][4][5]
箱自体→要素
箱についている番号→添え字
〈配列のルール〉
同じまとまりとして扱いたいので(「配列の全ての合計」「大きい順に並べ替え」など)、
配列に含まれる各要素の型(int型double型など)は全て揃える
〈配列のつくり方〉
① 配列変数の宣言(これから配列をつくりますよーとパソコンに伝える)
ex. int[ ] score;→int型の要素を代入出来る型を宣言
int・・・要素の型 score・・・配列変数名(任意の名前を指定)
② 要素を作成する(箱の中に入れる実体を作る・・ここでほんとの配列を作る作業)
ex. 「int型要素を5つ作成後、配列変数scoreに代入する」
score=new int[5];
newとは何か?(new演算子)
指定された型の要素を[ ]内の数値の分だけ作成する
・・・要は配列の実体を作成するということ
※①と②の記述は省略できる
(コードは効率よく書くのが目的!省略できるところは省略する)
① int[ ]score; →省略後 int[ ]score=new int[5];
② score=new int[5]
・配列の長さを調べたいとき
〈構文〉 配列変数名.length
ex. int nagasa=score.length;
System.out.println("nagasa");
出力→5・・配列の長さ
コンストラクタ(自分で初期値を設定する処理・・・詳しくは後で記述)をしなければ、
配列には初期値(何も代入されていない状態に入る値)として
自動で0(int型配列)/false(boolean型配列)/null(String型配列)が代入される
★これは、もし配列の中に何も値を代入せずに出力させた場合、自動で代入された初期値が出力されるということ
ex. int[ ]score=new int[5];
System.out.println(score[0]);
→[0]には何も値を代入していないので、0(自動初期値)が出力される
※ これも記述を省略できる
int[ ] score=new int[3]; →省略後 int[ ] score={20,30,40};
int[0] score=20;
int[1] score=30;
int[2] score=40;
・配列要素を最初から最後まで順に代入していきたい時
for文の終了条件に、配列変数名.lengthを用いる
〈構文〉
for (int i=0;i<配列変数名.length;i++){
→拡張for文でも書き換え可能
(ループするたびに要素が変数名(value)に入るようにして、順々に代入していく)
for (int value:score){System.out.println(value);}
int・・要素の型
value・・その場で決めた任意の変数名
score・・配列変数名
→この処理をすると要素は変数名に入っていくので、出力は変数名(value)でOK!
★配列は参照型。
参照型とは?
要素そのものではなく、要素が入っている先頭要素の番地情報が入っている
int型配列 int[ ]→参照型変数
int型 int→基本型変数(番地情報ではなく、データそのものが箱の中に入っている)
ex. int [ ]a={1,2,3};
a=null;//ここで参照が切れる
(番地情報を指していただけなので、その接続が切れる
→すなわち、何も指さなくなる)
そうすると、int [ ]a={1,2,3}という要素が並んだ箱(配列)は、どの変数からも指されないので、自動でゴミ箱行きになる(ガベージコレクション)
・配列要素の影響範囲ルール
宣言されたブロック内のみ使用可。そこから出ると配列要素はゴミになる
ex.boolean b=true;
if(b==true){
int[ ] i={1,2,3};
}
→これ以降のブロックでは、int[ ] i={1,2,3};は使えない