配列の宣言の仕方と注意点(IndexOutOfRangeException)

  • このエントリーをはてなブックマークに追加

スポンサーリンク

※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~

配列とは

配列は同じ型を複数扱う時に使用します。

配列とは、同じ型のデータをたくさん格納できる箱のようなものです。

そのため、複数のデータをひとまとめに扱えるというメリットがあります。

配列に格納されるデータは要素と呼ばれます。

1次元配列

※言語はC#

1次元配列は、一列に並んだデータを扱う場合に使います。

エクセルなどの表作成ソフトでいうところの、1列(または1行)で表現できるデータを扱うことに相当します。

例えば、5人の点数を記録したい場合を考えます。

配列を知らなければ、以下のようにいちいち変数を宣言する必要があります。

int point1 = 40;
int point2 = 70;
int point3 = 60;
int point4 = 55;
int point5 = 75;

しかし配列を知っていれば、宣言は1回で済みます。

int[] point_list = { 40, 70, 60, 55, 75 };

このとき、要素の値は、point_list[0]からpoint_list[4]までに入ります。

ソースコード

実行結果

point_list[0]は40
point_list[1]は70
point_list[2]は60
point_list[3]は55
point_list[4]は75

配列の宣言と要素の初期化

配列を宣言と要素の初期化を記述する際に以下のように書くことができます。

パターン1

int[] point_list = { 40, 70, 60, 55, 75 };

パターン2

int[] point_list =new int[] { 40, 70, 60, 55, 75 };

パターン3

int[] point_list = new int[5] { 40, 70, 60, 55, 75 };

パターン4

int[] point_list = new int[5];
point_list[0] = 40;
point_list[1] = 70;
point_list[2] = 60;
point_list[3] = 55;
point_list[4] = 75;

パターン5

int[] point_list;
point_list = new int[5];
point_list[0] = 40;
point_list[1] = 70;
point_list[2] = 60;
point_list[3] = 55;
point_list[4] = 75;

パターン1~3は、配列の宣言と要素の初期化を同時に行っています。

一方で、パターン4~5は配列の宣言と要素の初期化を分けて行っています。

※new int[5]の数字の5は要素数を意味しています。

初期化した際に、要素数と初期値の数があっていない場合はエラーになります。

例えば、以下の場合であれば、要素数は5なのに、初期値は1つしかありません。

ダメなパターン

int[] point_list = new int[5] {40};

ソースコード

配列は宣言する際に、扱える要素の数が決まります。

つまり、後から要素の数を足したり引いたりすることができません。

もしも、後から、扱う要素の数(配列の長さ)が変わるような場合は、ArrayListやListを使用します。

配列を扱うときの注意点

配列のインデックス(添え字)は0からスタートします。1からではりません。(point_list[0]が一番最初です。point_list[1]からではありません)

普段、私たちが物を数えるときは1からスタートしているので、以下のようなコードをうっかり書いてしまいがちです。

このコードを実行すると、というエラーが起きます。

理由は簡単です。

用意される要素は、point_list[0]~point_list[4]です。

それにもかかわらず、point_list[5]に値を入れようとして、エラーが起きます。

実行結果

point_list[1]は70
point_list[2]は60
point_list[3]は55
point_list[4]は75
ハンドルされていない例外: System.IndexOutOfRangeException: インデックスが配列の境界外です。

関連記事

無料体験レッスンあり。マンツーマン形式で初心者向け。
  • このエントリーをはてなブックマークに追加

スポンサーリンク

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)