・以下の水色の節は、教科書(やさしいJava)の内容に沿って説明しています
- 教科書の大事なところを抜粋して、掲載している
- 「Lesson 7 の内容(p.176から)
ページ数は、第6版と第7版で少しずれているかも、でも内容は同じ
- 教科書も目を通しておくこと
・配列変数に代入する
- 通常の配列の宣言
int [] test1; // int型の配列変数
test1 = new int[5]; // 5個の要素を確保
・配列変数に代入するということ
- 配列変数への代入
int [] test1; // int型の配列変数
test1 = new int[5]; // 5個の要素を確保
int [] test2; // int型の配列変数のみ宣言
test2 = test1; // 配列変数どうしの代入
test2 と test1
は、同じ要素にアクセスするようになる
- test1 = new int[5];
は、要素を5つメモリ上に確保して、そこにアクセスする
(参照する)ためのポイントを test1 に設定した、という処理を行っている
- test2 = test1;
は、参照先を代入しただけで、5個の要素を代入(コピー)したわけではない
|
・配列の長さを知る
- 配列の長さ(利用可能な要素数)は .length を使う
- for文 と組み合わせて利用する場合が多い
<基本的な使い方>
int []
test = {80,60,22,50,75}; // 要素数は5
:
for(int
i=0;i<test.length;i++){ // i=0,1,2,3,4と5回繰り返す
println(test[i]);
}
|
<異なる要素数に柔軟に対応できる>
int []
test = {80,60,22,50,75,92,15,55}; // 要素数は8
:
for(int
i=0;i<test.length;i++){ // i=0,1,2,・・,7と8回繰り返す
println(test[i]);
}
|
・配列の内容をソートする
- 配列に格納されている値を 大きい順 や 小さい順 に並び替える(ソートする)
降順
:大きい --> 小さい (80,75,60,50,22)
昇順
:小さい --> 大きい (22,50,60,75,80)
- ソートの手法は多くの種類がある、教科書の方法は「選択ソート」
小さいものを探し、先頭から順番に埋めていく
80,60,22,50,75 <このデータを昇順に並び替える手順>
80,60,22,50,75 5個の要素の中で、最小値を探す (22が最小値)
22,60,80,50,75 最小値(22)と配列[0](80)を入れ替える
22,60,80,50,75 配列[0]は決定、残り4個の要素の中で、最初値を探す(50が最小値)
22,50,80,60,75 最小値(50)と配列[1](60)を入れ替える
22,50,80,60,75 配列[1]は決定、残り3個の要素の中で、最初値を探す(60が最小値)
22,50,60,80,75 最小値(60)と配列[2](80)を入れ替える
22,50,60,80,75 配列[2]は決定、残り2個の要素の中で、最初値を探す(75が最小値)
22,50,60,75,80 最小値(75)と配列[3](80)を入れ替える
22,50,60,75,80 比較する要素がないので、ここで処理は終了
22,50,60,75,80 並び替え完了!
<選択ソートのデモ(降順)>
|
・多次元配列のしくみを知る
・多次元配列の書きかた
- 1次元配列
int [] x = {80,60,22,50,75};
| x[0]
|
x[1]
|
x[2]
|
x[3]
|
x[4]
|
| 80
|
60
|
22
|
50
|
75
|
- 2次元配列
int [][] y; // 2次元配列の配列変数
y = new int [3][4]; // 3行4列の要素(領域)を確保
または
int [][] y = {{52,83,34,72},{21,48,32,89},{10,24,59,93}};
| y[0][0]
|
y[0][1]
|
y[0][2]
|
y[0][3]
|
| 52
|
83
|
34
|
72
|
| y[1][0]
|
y[1][1]
|
y[1][2]
|
y[1][3]
|
| 21
|
48
|
32
|
89
|
| y[2][0]
|
y[2][1]
|
y[2][2]
|
y[2][3]
|
| 10
|
24
|
59
|
37
|
<for文の2重ループを用いる>
void setup()
{
int [][] y = {{52,83,34,72},{21,48,32,89},{10,24,59,93}};
// 3行4列の2次元配列を表示する
for(int i=0;i<3;i++){ // i=0,1,2
for(int j=0;j<4;j++){ // j=0,1,2,3
print(" " + y[i][j]);
}
println(""); // 改行のみ
}
}
|
実行すると以下のようになる

- 要素数の異なる組み合わせも可能
int [][] y =
{{52,83},{21,48,32,89},{10,24,59}};
| y[1][0]
|
y[1][1]
|
y[1][2]
|
y[1][3]
|
| 21
|
48
|
32
|
89
|
| y[2][0]
|
y[2][1]
|
y[2][2]
|
| 10
|
24
|
59
|
<for文の2重ループを用いた例>
void setup()
{
int [][] z = {{52,83},{21,48,32,89},{10,24,59}};
// 2次元配列を表示する
for(int i=0;i<3;i++){ // i=0,1,2
for(int j=0;j<z[i].length;j++){ // jは .length-1 まで
print(" " + z[i][j]);
}
println(""); // 改行のみ
}
}
|
実行すると以下のようになる

|
|