配列とは、同一種類の複数データを並び順で格納するデータ構造。
データ構造とは、データの集まりをコンピュータの中で、効果的に扱うため、一定の形式に系統立てて格納するときの形式。
左の図のように
配列は、いくつかあるデータ構造の中の一つである。
業務では、あまり使われない。
同一種類の複数データを並び順で格納する、とは、どういうものなのかみていきたい。
配列のイメージ図は以下のとおり。
要素(element)と呼ばれる箱が、連続して並んでいるのが配列。
この要素とは、格納されているデータ一つ一つのこと。
これだけでは、よくわからないので、実際に書いてみる。
変数と同じように、最初に宣言をする。
次も変数のときと同じように、代入する。
~注意点~
・配列の各要素には、同一種のデータしか格納できない
・添え字は必ず 0 から始まる。
また、「配列変数の宣言」と「要素の作成と代入」は同時におこなうことができる。
double [ ] weight;
weight = new double[5];
を
double [ ] weight = new double [5] ;
という一行にできる。
package blog;
public class Array {
public static void main(String[] args) {
// double型の要素に weight という配列変数名をつける
double[] weight;
// weight に 5つの要素を作る
weight = new double[5];
// 作成した5つの要素に、値を代入する
weight[0] = 47.2;
weight[1] = 46.2;
weight[2] = 46.8;
weight[3] = 46.9;
weight[4] = 46.7;
// weight[4](5番目) を参照する
System.out.println("今日の体重は" + weight[4] + "kgだった");
}
}
また、これと同じ内容のコードを、データ構造を使わずに書いた場合。
package blog;
public class Weight {
public static void main(String[] args) {
// 変数宣言と代入
double weight1 = 47.2;
double weight2 = 46.2;
double weight3 = 46.8;
double weight4 = 46.9;
double weight5 = 46.7;
// 変数 weight5 を参照する
System.out.println("今日の体重は" + weight5 + "kgだった");
}
}
データ構造を使うと、とてもすっきりしたコードになる。
配列には、省略記法が二種類あり、初期値の代入を、簡単に書くことができる。
実際に使ってみる。
package blog;
public class Abbreviation {
public static void main(String[] args) {
// 「配列変数の宣言」と「要素の作成と代入」を同時に行う
int[] sleepTime = new int[4];
sleepTime[0] = 420;
sleepTime[1] = 460;
sleepTime[2] = 480;
sleepTime[3] = 380;
System.out.println("今日の睡眠時間は" + sleepTime[3] + "分でした");
// 省略した書き方(配列の作成と初期値の代入を同時に行う)
int[] studyTime = new int[] { 300, 320, 250, 200 };
System.out.println("今日の勉強時間は" + studyTime[3] + "分でした");
// 省略した書き方(配列の作成と初期値の代入を同時に行う)
int[] sports = { 60, 120, 90, 30 };
System.out.println("今日の運動時間は" + sports[3] + "分でした");
}
}
■配列の要素数の取得■
また、配列は要素数を取得(要素の長さを出す)出来る。
書き方は、簡単で
配列変数名のあとに length(長さという意味)をつけるだけ。
package blog;
public class Acquire {
public static void main(String[] args) {
// 配列変数の宣言と、要素の作成と代入をおこなう
int[] consumptionTime = { 350, 300, 200, 350, 500 };
// consumptionTime.length で、要素の数を取得する
System.out.println(consumptionTime.length + "日間、勉強しました");
}
}
■要素数の取得の応用■
for文 の終了条件に、 配列変数名 .length と書くと、
配列の各要素を順番に取り出せる。
この、各要素のはじめから最後まで、順番に取り出すことを、配列を回す、という。
package blog;
public class TurnArray {
// 2014年の祝日を、forループ をつかって、出力するプログラム
public static void main(String[] args) {
// 配列変数 nationalHoliday に 要素を作成し、値を代入
int[] nationalHoliday = { 2, 1, 1, 1, 4, 0, 1, 0, 2, 1, 3, 1 };
System.out.println("これが、2014年の祝日!!!!");
System.out.println("振り替え休日も込み。");
// 終了条件に nationalHoliday を用いて、配列をまわす。
for (int i = 0; i < nationalHoliday.length; i++) {
// 添え字に 変数i を用いて、要素を取得
System.out.println((i + 1) + "月の祝日は" + nationalHoliday[i] + "日間です");
}
}
}
■拡張for文■
さらに応用。
拡張for文とは、
配列の要素を一つずつ取り出すループを簡単に書くために導入された新しいfor文。
データ構造(主に List)で多用されるため、よく理解しておいたほうがいい。
~注意~
バージョンが Java5以降 でしか利用できない!!
package blog;
public class Expansion {
// 2014年の祝日を、拡張for文 をつかって、出力するプログラム
public static void main(String[] args) {
// 配列変数 nationalHoliday に 要素を作成し、値を代入
int[] nationalHoliday = { 2, 1, 1, 1, 4, 0, 1, 0, 2, 1, 3, 1 };
System.out.println("これが、2014年の祝日!!!!第二段!!!");
System.out.println("また振り替え休日も含みます。");
// 変数 month は、何月かを表す変数
// 月は、1月から始まるので、month には 1 を代入
int month = 1;
// 拡張for文
for (int holiday : nationalHoliday) {
// 任意の変数 holiday のみで、値が代入された要素を呼び出せる
System.out.println((month++) + "月の祝日は" + holiday + "日です");
}
}
}
int month = 1;
(month++)
のあたりが、美しくないですね。
拡張for文を使うと、以前の普通のfor文で配列を回しているときと比べて、非常にスタイリッシュになる。
新しい構文は、スタイリッシュなようです。
非常に大切だから、拡張for文を使って、いろいろ書いてみるといいかもしれない。
■多次元の配列■
今まで学んだのは、1次元配列。
次は、縦の並びを加えた、2次元配列について学習する。
イメージは以下。
2次元配列の宣言
要素の型 [ ] [ ] 配列変数名 = new 要素の型[ 行数 ][ 列数 ]
2次元配列の要素の利用
配列変数名 [ 行の添え字 ][ 列の添え字 ]
これまでと同じように、一行にまとめて書くことができる
要素の型 [ ] [ ] 配列変数名 = { { 初期値1,初期値2,初期値3...} , { 初期値1,初期値2,初期値3... } } ;
package blog;
public class TwoDimensions {
// 数学と英語の合計勉強時間を出すプログラム
public static void main(String[] args) {
// 2次元配列の宣言と代入
int[][] time = { { 30, 70, 50 }, { 60, 40, 70, 30, 40 } };
// int型の変数 totalEnglish の宣言
int totalEnglish = 0;
// int型の変数 totalMath の宣言
int totalMath = 0;
// 拡張for文を使って、一行目の要素を順番に取得
for (int english : time[0]) {
// totalEnglish に english を足していく
totalEnglish += english;
}
// time[0](2次元配列の一行目)の要素数を取得
System.out.print(time[0].length + "日間の英語の合計勉強時間は");
System.out.println(totalEnglish + "時間");
// 拡張for文を使って、二行目の要素を順番に取得
for (int math : time[1]) {
// totalMath に math を足していく
totalMath += math;
}
// time[1](2次元配列の二行目)の要素数を取得
System.out.print(time[1].length + "日間の数学の合計勉強時間は");
System.out.println(totalMath + "時間");
}
}
コードがぐちゃぐちゃになってきました。
もう少し、綺麗に書けそうですね。
次は「メソッド」について学習するので、少しは改善されるかもしれません!














0 件のコメント:
コメントを投稿