【はじめてのjava】配列と繰り返し文【配列とArrayList編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
配列とArrayList編
配列とArrayList編では、複数のデータを一つの変数によってまとめて扱うことのできる配列とAllayListについて扱っています。
今回は、配列と繰り返し文を組み合わせた処理について扱っていきます。
目次
配列
length
生成した配列の要素数は、lengthを利用することで得ることが出来ます。lengthという単語を利用することから、配列の要素数は配列の長さという呼ばれ方もします。
lengthを使った配列の要素数を得る構文は以下の通りです。
配列名.length;
例えば、要素数10の配列arrayに対してlengthを使用してみましょう。
int[] array = new int[10]; int i = array.length;
のように記述することで、変数iに配列arrayの要素数10を代入して以降の処理に利用するといったことが出来るようになります。
配列と繰り返し文
for文と配列
以前の記事で配列の各要素を呼び出す際、
System.out.println(array[1]); System.out.println(array[2]); System.out.println(array[3]); System.out.println(array[4]); /* 以下省略 */
といった様にインデックスを一つずつ記述して呼び出すといった処理をしていました。
このような処理をしていては、要素が100個ある配列に対して100行の処理を記述するといった作業が必要になってしまいます。
この問題は、配列と繰り返し文を組み合わせることで解決できます。
配列と繰り返し文を組み合わせることでより短い行数で配列の要素をすべて取り出すことが出来るようになります。
以下の配列とfor文を組み合わせたサンプルコードを見てみましょう。
public class Sample1 { public static void main(String[] args) { int[] array = {10,20,30,40,50}; int sum = 0;//配列の要素の総和を求めるために利用 for(int i = 0; i < array.length ; i++) { System.out.println("array["+ i + "]の値は"+ array[i] + "です。"); sum += array[i];//sum = sum + array[i];に同じ。 } System.out.println("配列arrayの要素の総和は"+ sum); } }
実行結果
サンプルコードでは、配列の要素をfor文で一つずつ取り出しています。また、配列の要素を一つずつ取り出す際に、変数sumに配列の要素を一つずつ加算することで配列の要素の総和を求めています。
サンプルコードでは、for文の繰り返しの条件として「(int i = 0; i < array.length ; i++)」と記述しています。このように記述することで、「iの値が配列arrayの要素数と等しくなるまで、繰り返し文処理を実行する」という繰り返し処理を実行することが出来ます。今回、arrayの要素数は5なのでarray.lengthの部分の値は5となります。
サンプルコードでは、for文内のiの値は0, 1, 2, 3, 4, 5と推移していきます。i=5となった時、i < array.lengthが成り立たなくなるため処理を実行されずに繰り返し処理から抜け出します。よって、繰り返し処理はi = 0, 1, 2, 3, 4の場合の5回(arrayの要素数回)実行されます。
この時、配列の要素数についてはarray.lengthとして記述しているため、上記のfor文は配列arrayの要素数が100個や1000個であったとしても条件式を書き換える必要なく全ての要素について処理を実行することが出来ます。
拡張for文
拡張for文とは配列やコレクション(複数の要素の集まりのこと)の全要素を順番に取り出して処理する場合に使用できる構文です。(コレクションについては別記事で解説します。)
拡張for文の基本的な書式は、
for (変数宣言 : 参照変数名){ 繰り返し処理; }
です。
この時、参照変数名の部分に配列の変数を記述します。ここで記述された配列の要素について一つずつ取り出して繰り返し処理を行います。
変数宣言で宣言した変数に配列から取り出された要素が代入されます。この代入された値を基に、処理分が実行されます。そのため、変数宣言で宣言する変数のデータ型は、配列の要素のデータ型に合わせる必要があります。
拡張for文について、サンプルコードを見ながら確認してみましょう。
public class Sample2 { public static void main(String[] main) { int[] array = {10, 20, 30, 40, 50}; int sum = 0; int cnt = 0; for(int i: array) { System.out.println("array["+ cnt + "]の値は" + array[cnt] + "、現在の変数iの値は"+ i + "です。"); sum = sum + i; cnt++; } System.out.println("配列arrayの要素の総和は"+ sum); } }
実行結果
サンプルコードでは、6~9行目で配列arrayについて変数iを用いて拡張for文を実行しています。
この拡張for文では、arrayの全要素を一つずつ取り出していき、変数iに代入して拡張for文内の処理を実行していきます。
拡張for文では、通常のfor文のように配列の要素ののインデックスの値を得ることが出来ないため、変数cntというカウンタ変数を用意しています。
繰り返し処理の最後で変数cntに+1し繰り返しの回数をカウントすることで、各回のループに対応したインデックスの値を取得しています。
ポイント
.lengthとfor文を組み合わせることで簡単にすべての要素について取り出すことが出来る。
拡張for文という、指定した配列のすべての要素について繰り返し処理を行う繰り返し文が使用できる。
はじめてのJavaシリーズの目次はこちら
基本構文編の記事一覧はこちら