第4回Java勉強会 †
概要 †
繰り返し処理 †
for文、while文、do~while文を使用した繰り返し処理について説明します。
変数のスコープ †
変数のスコープ(可視範囲)について説明します。
配列 †
1つの変数に複数のデータを格納できる配列という構造について説明します。
詳細 †
繰り返し処理 †
プログラミングでは同じような処理を繰り返し処理(ループと呼んだりもします)を行うことがよくあります。
Java言語では、for文、while文、do~while文といった構文を使用して行います。(主にfor文を使用します)
- for文
- forの後ろの{ }(ブロック)の中の処理が繰り返し実行されます
初期化処理:その繰り返しの初期化処理を行います。大体はループ用の変数(ループカウンタ)の初期化を行います。
繰り返しの判定:条件式を記述します。ループが始まるときに判定が行われその結果がtrueであれば{ }(ブロック)内の処理が行われます。
更新処理:{ }内の処理が終わったときに行う処理を記述します。ここではループ用の変数を更新を行ったりします。
for (初期化 ; 繰り返しの判定 ; 更新処理) {
}
- サンプルプログラム - 1から10までの数字を出力します
for (int i = 1;i <= 10;i++) {
System.out.println("i=" + i);
}
上記の例の処理内容は以下のようになります。
- 初期化処理(int i = 1)が実行されます
- 「i=1」が表示されます(1回目の処理)
- 1周した後の処理(i++)が実行されて、iが2になります
- 条件判定(i <= 10)が行われ、条件を満たしているので・・
- 「i=2」が表示されます(2回目の処理)
- 1周した後の処理(i++)が実行されて、iが2になります
- 条件判定(i < 10)が行われ、条件を満たしているので・・
- 「i=3」が表示されます(3回目の処理)
- <<中略>>
- 「i=9」が表示される(10回目の処理)
- 1周した後の処理(i++)が実行される(i == 10)
- 条件判定(i < 10)が行われ、条件を満たしていないので・・
- for文の処理を終了する
- while文
- これも繰り返し処理を行うために使うことができます。
条件式:この条件式の結果がtrueの場合{ }内の処理を行います。
- サンプルプログラム - 1から10までの数字を出力します
int i = 1;
while (i <= 10) {
System.out.println("i=" + i);
i++;
}
上記の例の処理内容は以下のようになります。
- 変数iの宣言(int i = 1)が実行される
- whileの条件判定(i <= 10)が行われ、条件を満たしているので・・
- 「i=1」が表示され、「i++」が実行されてiが2になる(1回目の処理)
- 条件判定(i <= 10)が行われ、条件を満たしているので・・
- 「i=2」が表示され、「i++」が実行されてiが3になる(2回目の処理)
- <<中略>>
- 「i=10」が表示され、「i++」が実行されてiが11になる(10回目の処理)
- 条件判定(i <= 10)が行われ、条件を満たしていないので・・
- while文の処理を終了する
- do~while文
while文との違いは、条件判定をする前に処理が実行されることです。
(条件を満たしていなくても1回は処理が実行されます)
- do{ }内の処理が行われてから判定がされます。
- 例
int i = 1;
do {
System.out.println("i=" + i);
i++;
}
while (i <= 10);
- 二重ループ
for文{}内でさらにfor文を記述するものです。
- サンプルプログラム - 以下の例では二重ループで九九の計算結果を出力します。
1×1、1×2、1×3 ・・・・ 9×7、9×8、9×9 といった形で繰り返し処理が実行されます。
for (int dan = 1;dan <= 9;dan++) {
System.out.println(dan + "の段");
for(int i = 1;i <= 9;i++) {
System.out.println(dan + " x " + i + " = " + dan * i);
}
}
この二重ループでは、外側のループが1回実行されるうちに内側のループが9回実行されます。
内側のループの9回が終わると外側のループが2回目に入ります。
上記の例では、dan=1→i=1→i=2→・・・→i=9→dan=2→i=1→i=2→・・・i=9→dan=3→・・・という処理順序になります。
- 無限ループ
コーディングミスなどにより、ループを抜け出せなくなってしまうことを言います。
for文よりwhile文で起こりやすいと思います。
無限ループにならないように気をつけてコーディングしましょう。
- 例
int i = 0;
while (i == 10) {
System.out.println("i=" + i);
}
変数のスコープ †
変数は宣言する場所によって、その変数を使用できる有効範囲というものがあり変数のスコープといいます。
- for文の初期化部で宣言した変数
はfor文の中でしか使うことができません。
- 変数のスコープによって変数を参照できる箇所が違うことを確認してください。
for (int i = 0;i < 10;i++) {
System.out.println("i=" + i);
}
配列 †
1つの変数に複数のデータ(同じ型)を格納する構造の1つです。
- 配列の変数宣言
newは、ここでは配列を初期化する命令という風に思ってくれれば良いです。
「型名[] 変数名」と「型名 変数名[]」のどちらでもOKなんですが意味的には
「型名[] 変数名」→「○○配列型の変数です」
「型名 変数名[]」→「○○型の配列変数です」
となり、前者の方が良いとされています(?)
newを使用して初期化した配列の中身は
基本型の配列の場合→0
String型などオブジェクト型の場合→null
になります。
- 配列の宣言・初期化・代入
int型の要素が2つの配列を宣言・初期化する場合
※[] の中に指定する要素番号(index)は0から始まります。
つまり、配列の最後の要素を指定したい場合は[]の中に配列の要素数 - 1を指定しなければなりません。
int[] intArray = new int[2];
intArray[0] = 100;
intArray[1] = 200;
System.out.println("intArray[0]の値→" + intArray[0]);
System.out.println("intArray[1]の値→" + intArray[1]);
宣言・初期化・代入を1文で行う場合
int[] intArray = new int[] {100, 200};
int[] intArray = {100, 200};
- length
配列の要素数を取得するには
length使用例
int[] intArray = new int[] {100, 200, 300};
System.out.println("配列の要素数=" + intArray.length);
for (int i = 0;i < intArray.length;i++) {
System.out.println("intArray[" + i + "]=" + intArray[i]);
}
- 二次元配列
以下のように[ ]をひとつ増やすことで、二次元の配列を作ることもできます。
- 変数宣言の構文の例
型名[][] 変数名 = new 型名[要素数1][要素数2];
Javaの場合、二次元の配列というよりは
「配列の中に配列が入っている」イメージでしょうか。
配列の中に要素数の違う配列を入れることもできますが、あまり使わないと思います。
- 2次元配列の使用例
int[][] intArray = new int[2][3];
intArray[0][0] = 10;
intArray[0][1] = 40;
intArray[0][2] = 50;
intArray[1][0] = 88;
intArray[1][1] = 66;
intArray[1][2] = 44;
こんな風に書くよりも、以下のように書くほうがわかりやすいと思います。
int[][] intArray = new int[][]
{
{10, 40, 50},
{88, 66, 44}
};
練習問題 †
- 画像のような三角形を表示をするプログラムを、for文を使って作ってみましょう。
- 上の画像三角形とは逆向きに表示されるプログラムを作ってみましょう。
- 画像のような表示をするプログラムを、for文を使って作ってみましょう。
- 指定した値までの間で、素数のみ表示されるプログラムを作ってみましょう。
Java勉強会カリキュラムに戻る