今回は「配列」って呼ばれているものについて。
便利さや、実際にコードを使ったものを見ていって理解を深める。
それでも行ってみよー!
配列の便利さ
例えばこんなプログラムがあったとしよう。
int A=10;
int A1=20;
int A2=30;
int A3=40;
int A4=50;
このプログラムの意味自体はこれまで見てきたものだから分かる。
でも、この書き方はプログラミングにとっては非効率的な書き方で、もっと効率的に書くことができる。
上のように、同じような形で書かれたデータは「配列」と呼ばれるものを使って表すことが可能。
Arrayっていうらしい。
基本的にプログラミングは効率厨なのね。
その書き方が以下。
int [] A={10, 20, 30, 40, 50};
めちゃスッキリ。
Arrayをもっと詳しく
int [] A={10, 20, 30, 40, 50};
この形は、まずintと変数の型を書く。
そして[]大かっこ、次に変数「A」。
A,A1,A2と続けてきたから、とりあえずAを変数としておく。
別にBでもCでも何でもいい。
そして、{}の中に、A=10、A1=20といった数字の部分だけ書いている。
それぞれのデータの間には「,(コロン)」を忘れずに。
そしてここで忘れてはならないのが{}の後のセミコロン(;)。
パッケージやクラスの{}にはセミコロンいらないけど、これは必要だからね。
int A=10;
int A1=20;
int A2=30;
int A3=40;
int A4=50;
上のプログラムがArray(配列)を使うと下に書き換えるとができる。
int [] A={10, 20, 30, 40, 50};
これはどういうことかというと、まずプログラムが箱を作る。
□□□□□□…
こんな感じ。
{}の中にはデータが5つある。そして変数は「A」。
これによって何が起きるかというと、箱に左から「A[0]」、「A[1]」と名前が付けられ、{}内のデータが順番に箱の中に入っていく。
□ □ □ □ □ □…
A[0] A[1] A[2] A[3] A[4] ×
10 20 30 40 50 ×
つまり、変数「A」に[]がつき、0から順番に数字が入る。
A[0]は1つ目の箱の名前、A[1]は2つ目、A[2]は3つ目、A[3]は4つ目、A[4]は5つ目ということ。
{}にデータは5つだけだから、今回名前がつくのは「A[4]」まで。
そしてA[0]には「10」、A[1]には20と数字が入っているのである。
int [] A={10, 20, 30, 40, 50};
だからこのように書かれていても、{10, 20, 30, 40, 50}カンマごとに箱ができており、「A[0]、A[1]、A[2]、A[3]、A[4]」と名前がついているのである。
もし変数をBとしていればB[0]、B[1]となるし、aとしていればa[0]、a[1]となる。
前から順番に名前と数字は割り振られていく。
もし、「30」と「50」を画面に表示させたかったら、
System.out.println(A[2] + ” ” + A[4]);
と入力する。
「30」は{10, 20, 30, 40, 50}の前から3つ目。
3つ目は[]の中が「2」になる。
前から「A[0]、A[1]、A[2]、A[3]、A[4]」って0から名前が付けられていくからね。
3つめは[2]だね。
同様の考え方で、5つ目は[4]となる。
間に「” “(スペース)」を配置したのは、文字列を入れないと、計算してしまうから(A[2]+A[4]だと30+50と数字の計算になっちゃう)。
Javaプログラミング初心者の記録 演算子-算術演算子のまとめ Vol.10のちょっと気を付けるべき点を参考に。
それと単に画面に表示するときに「3050」よりも「30 50」と間をあけたかっただけ。
{}内の数字をすべて表示させたいときは拡張for文
int [] A={10, 20, 30, 40, 50};の{}内の数字をすべて表示させたいとき、System.out.println(A[0] + ” ” + A[1]…);と書いていくのは非常に面倒。
もっと簡単に書きたい。
そこで使えるのが「拡張for文」というもの。
どう使うかというと…
int [] A={10, 20, 30, 40, 50};
for(int Answer : A){
System.out.println(Answer);
}
ループのところでも使った「for」を使う。
そして()の中にはまず、配列の時に使った変数の型を入力。
今回は「int」を使ったから「int」とまず書く。
次に、全ての変数をまとめて画面に表示させるときの名前を付ける。
今回は適当に「Answer」とつけた。
ここの名前は何でもいい。
KでもBでもOK。
これは、まずA[0]の数字を求めて「10」という数字を一時的に「Answer」に保管。
forでループして、次のA[1]の数字「20」という結果を「Answer」に保管。
forでループして、次のA[2]の数字「30」という結果を「Answer」に保管。
forでループして、次のA[3]の数字「40」という結果を「Answer」に保管。
forでループして、次のA[4]の数字「50」という結果を「Answer」に保管。
っていうような感じ?
これでA[0]からA[4]までの5つのデータが全部「Answer」に入っていることになる。
そして「 System.out.println(Answer);」のところで「Answer」の中に入っているデータがすべて表示されることになる。
実行すると
10
20
30
40
50
ってなるはず。
これは全部の値を表示させたいときだけ有効な手段。
もう一つの配列
上で見たint [] A={10, 20, 30, 40, 50};という形は箱の中に「10」、「20」といった数字が入っている状態。
配列は何も数字が入っていない0の状態から表すこともできる。
それが下の形。
int[] B = new int[5];
この意味は「配列B」という変数が5つの数字を持っているということ。
この時、プログラムは隠れたところで5つの箱を作っている状態。
□□□□□
この箱の名前の付け方は先にやったものと同じ。
それぞれ左から「B[0]」、「B[1]」、「B[2]」、「B[3]」、「B[4]」と名前がついている。
上と違うのは、この配列はそれぞれの箱には「0」という数字が入っているということ。
だって何も数字を設定していないから。
□□□□□
0 0 0 0 0
これは後で数字を入れることができるということ。
例えば…
B[2]=10;
B[0]=32;
すると…
□□□□□
32 0 10 0 0
B[2](前から3つ目)に「10」、B[0](前から1つ目)に「32」と入る。
これを拡張forを使って表してみる。
int []B = new int[5];
B[2]=10;
B[0]=32;
for(int Answer2 : B){
System.out.println(Answer2);
}
実行すると…
32
0
10
0
0
となる。
数を設定しているのはB[0]とB[2]だけだから。
残りは数字が入っていない状態(0)だから「0」って表示されるの。
配列は文字列でも使用可能
整数を表すintで見てきたが、文字列を表す変数の型である「String」も使うことができる。
例えば…
String [] N={“ichi”, “ni”, “san”, “yon”, “go”};
for(int Answer-1 : N){
System.out.println(Answer-1);
}
これを実行したら
ichi
ni
san
yon
go
と表示される。
空っぽの配列も同様。
String M = new String[5];
String M[2]=”roku”;
String M[0]=”jyu”;
for(int Answer-2 : M){
System.out.println(Answer-2);
}
実行すると…
jyu
null
roku
null
null
となる。
データが入っていないところは「null」って表示される。
数字と文字列では表示され方が違うから注意。
意味は同じ。
箱が空っぽってこと。
数字と文字列の違いね。
一見難しそうに見えるけど、一つ一つ解剖していったらだいぶ理解できるようになったと思う。
まとめ
どんなに難しそうなものでも、そのプログラムになるにはちゃんと仕組みが合って理由があるんだなと思った。
落ち着いて1個1個掘り下げていけば、今までに見てきた知識で十分理解できるし、理解できなければうだうだ悩まずに飛ばしていって、時間をおいてまた考えればいい。
そう感じる項目だった。
悩む時間があるならコードをどんどん書いていくほうがいいと思う。
難しいところをこなしていくうちに、今まで悩んでいたところが解決するときもあるしね(きっとね)!
コメント