この記事の目次
1. 引数に配列を用いる
メソッドの引数にはint型やString型などの変数だけでなく、以下の例のように配列も使うことができます。
package helloworld;
public class HelloWorld {
public static void main(String[] args) {
int[] array = {1,2,3};
printArray(array);
}
static void printArray(int[] a) {
//拡張for文を利用する
for(int e: a){
System.out.println(e);
}
}
}1 2 3
メソッドを呼び出すときに引数として基本データ型の変数を指定した場合、メソッドに渡されるのは変数そのものではなく、変数に入っている値です。このように、値そのものが渡される呼び出しを値渡しと呼びます。
しかし、メソッド呼び出しの際に普通の変数ではなく、配列を渡すと不思議なことが起こります。
参照の値渡しと呼びます。package helloworld;
public class HelloWorld {
public static void main(String[] args) {
int[] array = {1,2,3};
printArray(array);
System.out.println("\nmainメソッドで定義したarray変数の内容: ");
for(int e: array){
System.out.print(e + " ");
}
}
static void printArray(int[] a) {
//配列変数aの内容を変える
for (int i = 0; i< a.length; i++)
a[i] *= 100;
System.out.println("printArrayメソッド内の配列変数aの内容: ");
for(int e: a){
System.out.print(e + " ");
}
}
}printArrayメソッド内の配列変数aの内容: 100 200 300 mainメソッドで定義したarray変数の内容: 100 200 300
2. 戻り値に変数を用いる
引数と同様に、戻り値に配列を使用することができます。
package helloworld;
public class HelloWorld {
public static void main(String[] args) {
int[] array = creatArray(5);
//配列の全要素を出力する
for(int e: array){
System.out.print(e + " ");
}
}
static int [] creatArray(int size) {
int[] a = new int[size];
for (int i = 0; i< size; i++)
a[i] = i;
return a; //配列を戻す
}
}0 1 2 3 4
3. 配列を扱うメソッド
● 最大値を求めるメソッド
問題:int型の配列を宣言し、初期化する。その配列の要素から最大値を求めるメソッドを作成しましょう
package helloworld;
public class HelloWorld {
public static void main(String[] args) {
int[] array = {2,5,3,8,3,1}; //配列を宣言し、初期化する
int max = maxOf(array); //maxOfメソッドでarrayの最大値を求め、maxに代入する
System.out.println("最大値: " + max);
}
static int maxOf(int[] a) {
int max = a[0]; //最初に、配列aの最初の要素を最大値にする
for(int e:a)
if (max < e)
max = e; //現在の最大値より大きい値に最大値を更新する
return max; //最大値を戻す
}
}最大値: 8
「配列本体への参照」です。参照で初期化されます。その結果、配列変数aは配列arrayの本体を参照することになります。換言すると、メソッドmaxOf内の配列aは、事実上mainメソッドの配列arrayのことになり、配列の代入と同じです。● 線形探索
問題:配列を宣言し、初期化する。その配列とint型のkey変数を実引数として、配列内の要素からkeyと等しい要素の番地を出力するメソッドを作成しましょう。
注意 : 配列内の要素からkeyと等しい要素は1つだと限らないため、メソッドの戻り値をArrayListにしましょう。
package helloworld;
import java.util.ArrayList;
public class HelloWorld {
public static void main(String[] args) {
int[] array = {2,5,3,8,3,1}; //配列を宣言し、初期化する
int key = 3; //探索keyを宣言し、初期化する
ArrayList< Integer > listIdx= linearSearch(array,3); //linearSearchメソッドでkeyと等しい要素の番地のリストを求め、listIdxに代入する
System.out.println(key + "と等しい要素の番地: " + listIdx);
}
static ArrayList< Integer > linearSearch(int[] a, int key) {
ArrayList< Integer > list = new ArrayList<>(); //ArrayListを宣言する
for(int i=0; i< a.length ; i++)
if (key == a[i])
list.add(i); //keyと等しい要素の番地をlistに追加する
return list; //keyと等しい要素の番地のリストを戻す
}
}3と等しい要素の番地: [2, 4]
JAVAのArrayListについて詳しく見たい方:
| JAVAのArrayList ../../../java/java-collection-arraylist.html この記事ではListを実装したクラスの一つであるArrayListを紹介します。ArrayListは大きさが可変という点でたくさんの応用があるので、開発現場でよく・・・ |
● 配列の要素の並びを反転する
問題:配列の要素の並びを反転するメソッドを作成しましょう。
package helloworld;
import java.util.ArrayList;
public class HelloWorld {
public static void main(String[] args) {
int[] array = {2,5,3,8,3,1}; //配列を宣言し、初期化する
//arrayの全要素を出力する
System.out.print("元のarray: ");
for(int e:array)
System.out.print(e + " ");
array = reverse(array); //reverseメソッドでarrayの反転した配列を求め、元のarrayに代入する
System.out.print("\narrayの反転したarray: ");
for(int e:array)
System.out.print(e + " ");
}
static int[] reverse(int[] a) {
for(int i=0; i< a.length/2 ; i++){
int b = a[i];
a[i] = a[a.length - i - 1];
a[a.length - i - 1] = b;
}
return a; //反転した配列を戻す
}
}元のarray: 2 5 3 8 3 1 arrayの反転したarray: 1 3 8 3 5 2
● 二つの配列の比較
問題:二つの配列が等しいかどうかを判定するメソッドを作成しましょう。
package helloworld;
public class HelloWorld {
public static void main(String[] args) {
//配列を宣言し、初期化する
int[] array1 = {2,5,3,8,3,1};
int[] array2 = {2,5,3,8,3,1};
int[] array3 = {2,5,4,8,3,1,5};
//arrayの全要素を出力する
System.out.print("array1: ");
for(int e:array1)
System.out.print(e + " ");
System.out.print("\narray2: ");
for(int e:array2)
System.out.print(e + " ");
System.out.print("\narray3: ");
for(int e:array3)
System.out.print(e + " ");
System.out.println("\n\n配列array1とarray2とは" +
(equals(array1, array2) ? "等しいです。" : "等しくありません"));
System.out.println("配列array2とarray3とは" +
(equals(array2, array3) ? "等しいです。" : "等しくありません"));
}
static boolean equals(int[] a,int [] b) {
if(a.length != b.length)
return false;
for (int i = 0; i < a.length; i++)
if(a[i] != b[i])
return false;
return true;
}
}array1: 2 5 3 8 3 1 array2: 2 5 3 8 3 1 array3: 2 5 4 8 3 1 5 配列array1とarray2とは等しいです。 配列array2とarray3とは等しくありません
メソッドequalsは2つの配列aとbの全要素が等しいかどうかを判定し、その結果に応じて、trueもしくはfalseを返却します。判定は以下に示す3つのステップで行います。
4. まとめ
JAVA言語のメソッドと配列は最も基礎な知識です。この記事により、メソッドの引数に配列を用いたり、戻り値に変数を用いたりすることを紹介しますした。それに、メソッド内で、配列を扱って処理仕方も紹介し、応用問題も提供しました。まだ学習したい方は以下の演習問題をぜひご覧ください。
5. 演習問題
配列を扱うメソッドの演習問題