画像(logo)

HOME/[JAVA言語 入門]小学生でもわかるJAVA言語 目次/十二日目 配列(はいれつ)!

広告

[JAVA言語 入門 小学生でもわかるJAVA言語]
十二日目 配列(はいれつ)!

広告

↓発売日:2017年04月04日↓

Java 第2版 入門編 ゼロからはじめるプログラミング (プログラミング学習シリーズ)

新品価格
¥2,030から
(2018/10/8 23:34時点)

目次へ戻る

配列(はいれつ)

(1)上から順番に
(2)条件で分かれ道
(3)くり返し

基本的なプログラムの仕組みは学びました。次にそれを使いこなす上で便利な機能「配列(はいれつ)」を紹介します。

たくさんの変数

今までは簡単なプログラムばかりだったので、変数も1つか2つぐらいしか使いませんでした。

でも変数が100個や200個に増えた時に全て別々に名前を付けるのは、けっこう大変ですよね!

そんな時に使うのが「配列」です!

使ってみよう!

/*十二日目 プログラム1*/
class Test{
	public static void main(String args[]){
		int hairetu[] = {2,4,1,0,3};
		System.out.println("hairetu[0] = " + hairetu[0]);
		System.out.println("hairetu[1] = " + hairetu[1]);
		System.out.println("hairetu[2] = " + hairetu[2]);
		System.out.println("hairetu[3] = " + hairetu[3]);
		System.out.println("hairetu[4] = " + hairetu[4]);
	}
}

■実行結果■

画像(jb_12_1)

■説明■

配列は変数に番号をつけて使いやすくしたものです。

まずは宣言ですね!

int hairetu[] = {2,4,1,0,3};

「int」タイプの変数「hairetu」を使います!という事で「hairetu[]」と[]カッコをつけます。

初期化は{}カッコの中に「,」コンマで区切って書くことができます。

この{}カッコを使ってまとめて初期化するやり方は最初の宣言と一緒に初期化する時だけ使えます。

使う時は

hairetu[0]

このように[]カッコの中に番号を書いて使います。この番号の事を添え字(そえじ)といいます。

別々に宣言、初期化などしたい場合は

int hairetu[] = new int[5];

hairetu[0] = 2;
hairetu[1] = 4;
hairetu[2] = 1;
hairetu[3] = 0;
hairetu[4] = 3;

このように「new int[5]」、int型の配列を5個使います!みたいに「new」という命令を使って配列を用意します。

「String」で用意したい場合は

String hairetu[] = new String[5];

のようにします。

途中で一つだけ内容を変更したい場合は

hairetu[2] = 152;

のようにします。

注意

あらためて添え字(そえじ)に注目してください。番号が「hairetu[0]」から始まってます。

そうです!

配列の番号は「0」から始まります!なので最後は「hairetu[4]」となりますのでご注意ください。

ここで鋭い方は気づいたかもしれませんがこの「hairetu[4]」の隣の「hairetu[5]」の内容も実は調べたりする事ができます。

が!これは

バッファオーバーフロー

というあまりよろしくないエラーになるので絶対にやめましょう!

コンピューターは限られたメモリをムダにしないように再利用しながら動いております。

なのでプログラム上でコンピューターに「このメモリ使いますよ!」と宣言した場所以外のメモリはコンピューターを動かす上で超大事な数字が保存されていたりするのでむやみやたらにいじってはいけないのです。

上手に使ってみよう!

配列にする事によってさきほどの「添え字」を変数にする事ができます。

さきほどのプログラムをもっと簡単に書いてみましょう!

/*十二日目 プログラム2*/
class Test{
	public static void main(String args[]){
		int hairetu[] = {2,4,1,0,3};

		for(int suji = 0;suji < 5;suji++){
			System.out.println("hairetu[" + suji + "] = " + hairetu[suji]);
		}
	}
}

■実行結果■

画像(jb_12_2)

■説明■

配列と「for」命令のよく使われるカタチです!

for(int suji = 0;suji < 5;suji++){
	System.out.println("hairetu[" + suji + "] = " + hairetu[suji]);
}

「hairetu[suji]」で添え字を変数にして一気に配列の内容を表示してます!

こうすれば一度に100個、200個あるたくさんのデータを使えますね!

「while」命令を使った例も見てみましょう。

/*十二日目 プログラム3*/
class Test{
	public static void main(String args[]){
		int hairetu[] = {2,5,1,8,3,0,7,6,9,4};
		int suji = 0;
	
		while(hairetu[suji] != 0){
			System.out.println("hairetu[" + suji + "] = " + hairetu[suji]);
			suji++;
		}
	}
}

■実行結果■

画像(jb_12_3)

■説明■

目的のデータに到達するまで「while」命令で繰り返し配列内を調べるプログラムです。

「while」命令を使えば配列のサイズが変わった場合でもプログラムを簡潔に書く事ができますね!

ただ上記のプログラムだと目的のデータがなかった場合無限ループになるので何か対策が必要です。

2次元配列

続けてちょっと配列をパワーアップさせた2次元配列を学んでいきたいと思います。

「にじげん!」って聞いただけでいっきにレベルアップしそうな感じですが、ご安心ください。ただ配列が束(たば)になっただけの話です。

2次元のイメージ

オセロのマスとか将棋のマスのような平面を想像してください。

int hairetu[][] = new int[6][4];

例えば「new int[6][4]」という2次元配列だとすると「縦6マス×横4マス」のような平面を想像します。

画像(jb_12_4)

こんな感じですね。このそれぞれのマスに数字とかを入れていくイメージで考えるとわかりやすいかと思います。

2次元の場合も配列番号の最初は[0][0]から始まりますので、この場合の終わりは[5][3]になります。

ではプログラムを作ってみましょう!

/*十二日目 プログラム4*/
class Test{
	public static void main(String args[]){
		int hairetu[][] = new int[3][2];
		
		hairetu[0][0] = 1;
		hairetu[0][1] = 2;
		hairetu[1][0] = 3;
		hairetu[1][1] = 4;
		hairetu[2][0] = 5;
		hairetu[2][1] = 6;

		System.out.println("[0][0] = " + hairetu[0][0] + ":[0][1] = " + hairetu[0][1]);
		System.out.println("[1][0] = " + hairetu[1][0] + ":[1][1] = " + hairetu[1][1]);
		System.out.println("[2][0] = " + hairetu[2][0] + ":[2][1] = " + hairetu[2][1]);
	}
}

■実行結果■

画像(jb_12_5)

■説明■

まず2次元配列の宣言ですが、

int hairetu[][] = new int[3][2];

このようになります。配列[縦]×[横]のようなイメージで作りましょう。

次に初期化ですが、ちょっとめんどくさいやり方をしてます。

hairetu[0][1] = 2;

このように場所を一つ一つ選んで数を入れる事ができます。

まとめて初期化する方法もありますので次のプログラムで説明いたします!

いろいろな場所を表示してみて、どの番号がどのマス目になるのかイメージできるようにしてみてください。

配列でプログラムをパワーアップ!

最初の方にやったクリスマスツリーを書くプログラムを配列と「for」命令を使って書き直してみましょう!

/*十二日目 プログラム5*/
class Test{
	public static void main(String args[]){
		int tree[][] = {
			{0,0,0,0,0,0,0,0,0},
			{0,0,0,0,1,0,0,0,0},
			{0,0,0,9,9,9,0,0,0},
			{0,0,9,9,9,9,9,0,0},
			{0,9,9,9,9,9,9,9,0},
			{0,0,0,0,9,0,0,0,0},
			{0,0,9,9,9,9,9,0,0},
			{0,0,0,9,9,9,0,0,0},
			{0,0,0,0,0,0,0,0,0}
		};

		for(int suji1=0;suji1<9;suji1++){
			for(int suji2=0;suji2<9;suji2++){
				if(tree[suji1][suji2] == 9)System.out.print("□");
				else if(tree[suji1][suji2] == 1)System.out.print("☆");
				else System.out.print("■");
			}
			System.out.print("\n");
		}
	}
}

■実行結果■

画像(jb_12_6)

■説明■

2次元配列をまとめて初期化しております。

int tree[][] = {
	{0,0,0,0,0,0,0,0,0},
	{0,0,0,0,1,0,0,0,0},
	{0,0,0,9,9,9,0,0,0},
	{0,0,9,9,9,9,9,0,0},
	{0,9,9,9,9,9,9,9,0},
	{0,0,0,0,9,0,0,0,0},
	{0,0,9,9,9,9,9,0,0},
	{0,0,0,9,9,9,0,0,0},
	{0,0,0,0,0,0,0,0,0}
};

このように一列一列を{}カッコで囲む事によって平面のように2次元配列を初期化できます。

初期化の時だけこの書き方はできます!

{}カッコの間を「,」コンマで区切っているのと、最後の列だけは{}カッコの後「,」コンマが付かないので注意してください。

2重ループ

次に2重ループが使われてます。これもなれないと最初はややこしいと思います。

for(int suji1=0;suji1<9;suji1++){
	for(int suji2=0;suji2<9;suji2++){
		(ループの中の命令);
	}
}

ループのイメージですがこのプログラムで言うと

まず外側のループを通りこして先に内側のループで横一列のラインを作ります。

その1

■■■■■■■■■

一列作った所で一度内側のループを抜けて縦のラインを一つだけ進めてから、再び内側のループに入ります。

その2

■■■■■■■■■
■■■■☆■・・・

後はくり返しですね!

その3

■■■■■■■■■
■■■■☆■■■■
■■■□□□■■■
■■□□□・・・

内側のループが終わったら外側のループを一つ進めるというのを想像しましょう!

「if」命令で条件に合う所を置きかえる

そしてループの最中に条件に合う所の数字を絵柄に置きかえます。

if(tree[suji1][suji2] == 9)System.out.print("□");
else if(tree[suji1][suji2] == 1)System.out.print("☆");
else System.out.print("■");

2次元配列の全ての内容を2重ループで調べる。その内容の条件が合えば置きかえる。これがポイントですね!

配列はプログラムを組む上でスゴイ大事なテクニックです。何回も練習して身につけましょう!

次回

十三日目 「String」!

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓発売日:2017年04月18日↓

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

新品価格
¥2,990から
(2018/10/8 23:35時点)

↓発売日:2016年06月25日↓

新・明解Java入門 (明解シリーズ)

新品価格
¥2,916から
(2018/10/8 23:36時点)

↓発売日:2016年08月31日↓

やさしいJava 第6版 (「やさしい」シリーズ)

新品価格
¥2,786から
(2018/10/8 23:37時点)

↓発売日:2018年11月21日↓

本格学習 Java入門 [改訂3版]

新品価格
¥2,462から
(2018/10/8 23:38時点)

↓発売日:2016年12月15日↓

Javaの絵本 第3版 Javaが好きになる新しい9つの扉

新品価格
¥1,706から
(2018/10/8 23:39時点)

↓発売日:2016年09月28日↓

やさしいJava 活用編 第5版 (「やさしい」シリーズ)

新品価格
¥2,786から
(2018/10/8 23:40時点)