■ 配列
はじめに
プログラミング言語には、「いくつかの関係のあるデータをグループにして、まとめて1つの変数として扱う」仕組みが用意されており、
以下のような、 その変数が保持する特定の値や値全体に対して行える機能 を持ち合わせています。
- 取り出し
- 書き換え
- 削除
これらの機能をプログラミング上の呼び方として、「配列操作」と呼びます。
バラバラではなく、ひとまとめにすることで非常に扱いやすくなります。
配列のイメージはこんな感じです。
形式張ったものではなく、現実世界のモノに例えると、、、
- 下駄箱(靴を複数扱う)
- キャビネット(資料などを複数扱う)や本棚(文庫本や漫画、参考書などを扱う)
- カレンダー(年、月単位で日付を扱う)
などでしょうか。
上記のモノを表す内容として共通しているのが、
1つを表すために「 複数 」を扱う点です。
先程よりはイメージが湧いてきたのではないかと思います。
それではさっそく作り方を見ていきましょう!
Step1: 配列の作り方
配列を作るためには、次の2ステップが必要です。
STEP1: 配列の宣言
STEP2: 要素代入
- STEP1 配列の宣言
- 要素の型[] = 配列変数名
int[] arr;
↑ここでint型の要素を代入できる配列変数arrを用意する - STEP2 要素の代入
- 配列変数名 = new 要素の型[要素数]
arr = new int[5];
↑ここでint型の要素を5個作成してarrに代入し、配列arrの完成。
STEP1とSTEP2を合わせて
int[] arr; arr = new int[5];
↑コレが一連の流れになります!!
ポイント
しかし実は、上記のSTEP1とSTEP2は同時に行うことが可能です!!
int[] arr = new int[5];
↑同時に行うと、コードが1行でまとまってスッキリするので極力こちらを使用するようにしましょう。
Step2: 初期化
変数の値を取り出すには、必ず値を代入して初期化しなければなりません。
初期化をしていない変数を利用すると、エラーが発生します。
【初期化の方法】
int[] arr = new int[5]; //配列arrの宣言 arr[0] = 3; // 1番目(先頭)の要素に 3 を代入 arr[1] = 1; // 2番目の要素に 1 を代入 arr[2] = 6; // 3番目の要素に 6 を代入 arr[3] = 0; // 4番目の要素に 0 を代入 arr[4] = 4; // 5番目の要素に 4 を代入
解説
上記の形で初期化することができますが、一行ずつ記述するのが面倒だと思うかもしれません。
しかし、あらかじめ要素の数が決まっている場合は、配列の宣言と初期化を同時に行うことができます!
【宣言と初期化を同時に行う】
// 6、10、3、1、8 を要素の値(初期値)とする、要素数 5 の // a という名前のint型配列を宣言。 int[] a = {6, 10, 3, 1, 8};
これでだいぶスッキリしましたね!!
今宣言した配列のイメージはこんな感じです。
- ・
length
- Javaの配列には、その配列の要素数を調べることができる
length
というフィールド(情報)があります。
length
を使用することにより、プログラマが配列の要素数を別の変数に保持するなどの
管理をする必要がなくなるため、配列がとても利用しやすくなります。 - ・
length
値の参照方法 - 配列の変数に対して「配列変数.length」のように「
.
(ドット)」で繋いで記述します。
int[] arr = {2, 0, 95}; // 配列arrのlengthフィールドを表示してみる。 →要素数は「3」が表示される System.out.println("配列arrの要素数…" + arr.length);
実行結果
配列arrの要素数…3
また、配列の各要素を参照したり更新したりするには、配列名の直後に [ ] をつけ、
添え字(インデックス)と呼ばれる数字を指定して要素を特定します。
添え字は0から順番に数えます。配列の先頭は、1ではなく0であることに注意しましょう。
【添字の指定】
// 添え字(インデックス)が 2 の要素の値を表示 System.out.println("arr[2] … " + arr[2]);
実行結果
arr[2] … 95
補足
- ・配列値操作時の説明
- 値操作に関しては難しくはありませんが、「文字や言葉として説明する際」には注意する必要があります。
- n 番目の要素値
- 添え字(インデックス) が n の要素値
【サンプル】
String[] strArray = new String[3]; strArray[1] = "ABC";
上記コードを説明(コメント)する場合は、、、
// 要素数が3のStringクラスの配列 strArray を定義 String[] strArray = new String[3]; // 2番目の要素値(or 添え字(インデックス)が 1 の要素値)を 文字列ABC で初期化 strArray[1] = "ABC";
といったように表現します。
日本語の問題ですが、
「 0番目 」という表現が気持ち悪いのはなんとなくわかる気がしますよね?
配列操作のように値の位置(住所みたいな)を表現する場合は、
「 ○○が0 の〜〜〜」といったようにするとよいでしょう。
ここで、具体例を用いて考えてみましょう。
3人が受けたテストの合計点を求めるプログラムを書きます。
// int[]型の変数scoreの宣言と初期化 int score[] = { 80, 70, 90 }; // 合計スコアを宣言し、0で初期化する int sum = 0; sum = score[0] + score[1] + score[2]; System.out.println("合計点は" + sum + "点です");
【実行結果】
合計点は240点です
課題
提出ファイル
「JavaStudy」ディレクトリの中に「1-2」というディレクトリを作成し、そこに課題を作成してください。
ファイル階層は
Windowsなら C:\LetsEngineer\curriculum\JavaStudy\1-2\
Macなら /Users/※ユーザー名※/LetsEngineer/curriculum/JavaStudy/1-2/
になります。
- ・Task1_2.java (下記コードをコピーしてください)
- ・Task1_2.class (コンパイル時に生成されます)
/** * Task1-2 : 課題内容 * * 本課題では、配列の使い方を学んでいきましょう。 * 問①から問⑥まであります。 * 指定された値と変数名を守って記述してください。 * * 問⑤,⑥については、コメントを入れてください。 * */ public class Task1_2 { public static void main(String[] args) { // ①「JAPAN」、「AMERICA」、「KOREA」を要素の値(初期値)とする配列 countryを作成しなさい。 // ② ①で作成した配列の要素数を出力してください。 /* ③下記の値を保持した、要素数3のStringクラスの配列strArrayを作成しなさい。 * 1番目(先頭)の要素に 「りんご」 を代入 * 2番目の要素に 「もも」 を代入 * 3番目の要素に 「ぶどう」 を代入 */ // ④ ③で作成した配列の2番目の要素を出力しなさい。 /* ⑤下記の処理について、何をしているのかコメントを記入してください。 * [ここへ記述] */ int[] intArray = { 10, 20, 30, 40, 50 }; // ⑥下記の処理について、何をしているのかコメントを記入してください。 // [ここへ記述] System.out.println(intArray[1] + intArray[4]); } }
- 以下の添付画像のようにコンソールへ出力されるよう課題を実施し提出してください。
コンパイルと実行の仕方については下記を確認しましょう。
Hello Worldを出してみる(Windowsの方)
Hello Worldを出してみる(Macの方)
提出方法については、カリキュラムの課題提出方法の通りにお願いします。