- トップページ
- 特集PC技術
- Java言語入門 ~C言語を学んだ君へ~
- [第5回]繰り返し処理と分岐処理
Java言語入門 ~C言語を学んだ君へ~
[第5回]繰り返し処理と分岐処理
繰り返し処理と分岐処理について学びます。C言語で知った知識がJavaで活用することができます。
しつこいですが、Javaで変更になった点と新しく出来る点に気をつけて進めていきましょう。
目次
- [1] for文
- [2] while文
- [3] boolean型
- [4] if文
- [5] switch文
- [6] break文とcontinue文
- [7] 練習問題 第1問
- [8] 第1問解答
- [9] 練習問題 第2問
- [10] 第2問解答
- [11] 練習問題 第3問
- [12] 第3問解答
[1] for文
繰り返し処理の最初はfor文から学習しましょう。
for文といえば以下のように記述しました。
for文書式
for (初期化式; 条件式; 増減式){
処理内容
}
for文でこの記述方法は、Javaでも同様に使うことができます。
では、実際にサンプルを書いて実行してみてください。
サンプルプログラム1 ファイル名:Java05_01.java
public class Java05_01{ public static void main(String args[]){ int i; for( i = 1; i < 10; i++){ System.out.println("処理は"+ i + "回目です"); } } }
実行結果
どうですか?C言語と同じように実行できたはずです。
同じような記述ができたところで、次はJavaでできるfor文を見てみましょう。
以下のサンプルになるようにソースを変更してみてください。
サンプルプログラム2 ファイル名:Java05_01
public class Java05_01{ public static void main(String args[]){ for( int i = 1; i < 10; i++){ System.out.println("処理は"+ i + "回目です"); } } }
実行結果
前のプログラムと全く同じ動きをしました。
Javaでは、変数宣言はどこでもできると説明しました。
for文の開始時に宣言しても全く構わないのです。
C言語のときのように変数宣言を忘れてもわざわざ最初に戻る必要がありません。
ただし、このやり方だとひとつ注意することがあります。
今のサンプルを以下のようにしてみてください。
サンプルプログラム3
public class Java05_01{ public static void main(String args[]){ for( int i = 1; i < 10; i++){ System.out.println("処理は"+ i + "回目です"); } System.out.println(i); // ここはエラーになる } }
プログラムの解説
上のように書くと、System.out.println(i);はエラーになってしまいます。
for文の中に宣言を行うと、そのループ内でのみ通用するということを忘れないで下さい。
これの詳細については第8回「継承」にて説明します。
ここは間違いやすいポイントです。
[2] while文
2つ目に学ぶ繰り返し処理はwhile文です。
while文もC言語と同様に使うことができます。
ここで、while文について復習をしてみましょう。
while文の書式
while (条件式){
処理の内容
}
C言語と使い方は変わりません。
サンプルプログラム1 ファイル名:Java05_02.java
public class Java05_02{ public static void main(String args[]){ int i = 10; while (i > 0){ System.out.println("処理は"+ i + "回目です"); i--; } } }
実行結果
これは特に説明は必要がないと思います。C言語で使っていたように使うことができます。
もちろんdo-while文もJavaで使うことができます。
[3] boolean型
ここで、boolean型について説明しておきたいと思います。
繰り返し処理とは関係ないようなものだと思いますが、重要な要素です。
boolean型とは"true"か"false"を格納できるデータ型です。
このboolean型はJava言語で無限ループの使用するときに使います。
C言語でwhile文を使った無限ループを書いた時に以下のように使いました。
C言語の無限ループ
while(1){
処理内容
}
と書いたと思いますが、これを使うことはできません。
Javaで、同様な動作を起こすときにはこのようにします。
Java言語の無限ループ
while(true){
処理内容
}
while(1){...}と同様の働きを作成したい場合にはJavaでは、while(true){..}とします。
C言語でこのループを抜けるときに使用したbreakもJavaで同じように使うことができます。
さて、ここまで説明してこなかったことを説明しましょう。
上のプログラム(Java05_02)では、while(i > 0){.....}と書いています。
この"(i > 0)"の部分に注目してください。このプログラムの内部処理
System.out.println("処理は"+ i + "回目です");
は"(i > 0)"の時に実行されています。これは分かると思います。
つまり"(i > 0)"はこの条件式が満たされて、trueだから実行されているのです。
このwhileが終了するときに"(i > 0)"を満たなさない、つまりfalseだから実行されないのです。
Java05_02プログラムのSystem.out.println("処理は"+ i + "回目です");を
System.out.println(i > 0);に変えてみてください。
出力される結果が"true"になるはずです。この"i > 0"が満たされていない場合には"false"が出力されます。
これを使うとプログラムを作成しているときに今の値が条件を満たしているのか確認ができます。
上の条件式がtrueの時にwhile内が実行され、条件式がfalseの時には実行されません。
継続条件がtrueというのは値同士を比較して"真"だったというのも当てはまります。
ここで説明したboolean型はプログラムを組む時に使う場面も多いはずです。
使い方は確実に理解しておきましょう。
[4] if文
まずは、if文を学びます。
if文の書式について説明します。
if文の書式
if (条件式1) {
処理A
} else if (条件式2) {
処理B
} else if (条件式3) {
.
.
.
.
.
} else {
処理C
}
C言語と違いはありませんね。
実際にJavaのプログラムを見てみましょう。
サンプルプログラム
public class Java05_03{ public static void main(String args[]){ for(int i = 0; i < 10; i++){ System.out.println("i = "+ i); if (i >= 5) { System.out.println("変数iは5以上の数です"); } else { System.out.println("変数iは5未満の数です"); } } } }
実行結果
for文でループさせて、iの値の状態で分岐をさせています。
前ページでのwhile文でも説明しましたが、"i >= 5"を満たしている(true)から2つ目の出力が実行されます。
[5] switch文
さて、2つ目の分岐処理はswitch文です。
switch文の書式
switch(式) {
case 定数式1:
処理
break;
case 定数式2:
処理
break;
・
・
・
default:
処理
}
では、実際にサンプルプログラムを見てみましょう。
サンプルプログラム
public class Java05_04{ public static void main(String args[]){ for(int i = 0; i < 5; i++){ switch (i) { case 0: System.out.println("iの値は0です"); break; case 1: System.out.println("iの値は1です"); break; case 3: System.out.println("iの値は3です"); break; default: System.out.println("iは値は0,1,3以外です"); } } } }
実行結果
for文でループさせて、iの値の状態で処理を分岐させています。
特にプログラムの内容に関しては大丈夫でしょうか。
switch文の式には、byte、char、short、int型を使うことができます。
[6] break文とcontinue文
break文はループを抜けるときに使用します。
基本的な使い方はC言語と同じです。
サンプルソースを見てください。
サンプルプログラム break文
public class Java05_05{ public static void main(String args[]){ int i, sum = 0; for(i = 0; i < 20; i++){ sum += i; System.out.println("現在処理の回数 = " + i); System.out.println("sum = " + sum); if(sum > 20){ System.out.println("sumの値が20を超えたので終了"); break; } } } }
実行結果
for文だけならば、iの値が20になるまで処理を行うわけですが、
途中で sum > 20 と条件を指定しています。ここで、break文を使って、ループを抜け出しています。
ただし、この場合はひとつのループしか抜け出せないので、
複数のループ内を一気に抜け出したい場合には、以下のように記述します。
ラベル付きbreak文
LABEL:
for(int i = 0; i < 5; i++){
for(int j = 0; j <= 10; j++){
処理
break LABEL;
}
}
これで、その中で何重にもループをしていた場合、
break 名前; と記述することで、指定していたブロックまで抜けることができます。
上の例だとLABELのあるブロックまで抜けることができます。
次にcontinue文について説明します。
continueを使うと処理を行わずにスキップすることができます。
以下のサンプルを見てください。
サンプルプログラム continue文
public class Java05_06{ public static void main(String args[]){ int i; for(i = 0; i < 5; i++){ if(i == 2) continue; System.out.println("現在処理の回数 = " + i); } } }
実行結果
実行してみると分かりますが、iが2の時に以下の処理を行いません。
continue文はこのように使います。break文同様にcontinueにもラベルが使えます。
これで、制御文の学習が終わりました。
< p />
[7]練習問題 第1問
以下の指示に従ってプログラムを作成しなさい。
なお、ファイル名はEx05_01.javaとする。
作成にあたっての条件
修正が必要なプログラムを元に、下の出力結果になるようにプログラムを記述しなさい。
1.□で囲われている部分に適切なソースを記述すること
修正が必要なプログラム
出力結果
[8]第1問解答
第1問解説
C言語を学んだ皆さんならプログラムのイメージが沸いたのではないかと思います。
switch文と、break文を用いてこのように書くことで先ほどのプログラムは作成できます。
少し難しいポイントはcase 1:の部分でbreak;をしていない点です。
これにより、iの値が1のとき、「こんにちは」と「こんばんわ」の両方が実行されます。
case 2の場合には、「こんばんわ」のみが実行されます。
[9]練習問題 第2問
以下の指示に従ってプログラムを作成しなさい。
なお、ファイル名はEx05_02.javaとする。
作成にあたっての条件
以下に表示されているプログラムを修正し、出力結果となるプログラムを作成
修正する必要があるプログラム
出力結果
[10]第2問解答
第2問解説
さて、できたでしょうか。元のプログラムでfor文の内に、
変数iの値によって異なる処理が行われるようにプログラムを修正します。
5~8行目:continue文
break文を使うとすべてを脱出してしまうので、
continue文を用いて特定の値のときのみSystem.out.println();をスキップしています。
continueの対象となるのが、2,5,7のときなのでif文と演算子を使って複数条件指定を行っています。
"||"は、またはという意味で、3つの条件のうち1つでも条件に合ったものがある場合以下の処理を実行します。
9~11行目:break文
最後にiの値が8になったら、break文を使ってfor文を抜けています。
もちろん、8,9もifの中に加えて、continue文でスキップをしても正解です。
[11]練習問題 第3問
以下の指示に従いプログラムを作成しなさい。
なお、ファイル名はEx05_03.javaとする。
以下に表示されるプログラムの白い部分に正しい記述を行い、
出力結果となるようなプログラムを作成しなさい。
修正する前のプログラム
出力結果
[12]第3問解答
第3問解説
かなり紛らわしい問題ですが、解けたでしょうか。
C言語の知識のままやってしまうと解くことができません。
boolean型でwhileループを行う
while文の無限ループを行うためにboolean型を使いました。
boolean型の値はtrueかfalseの2種類の値が格納できます。
whileの条件式がtrueの時、falseになるまで無限ループします。
そこで、4行目のプログラムを以下のように記述することになります。
boolean i = true;
これで while(true){...}となるのでループが継続されます。
また、このwhileループを止めるときはtrueをfalseに変えます。よって、12行目で
i = false;
と記述し、5回ループした時にiの値をfalseに変えてループを抜けます。
int型等では、ループはできない
C言語ではwhileループを指定した時に
while(1){...}
と行いましたが、Javaではすることができません。
この問題はわざと間違いやすいように4行目、12行目を隠して問題を解かせました。
コメント
匿名
サンプルプログラム continue文が間違って記載されています。
正しくは、以下です。
public static void main(String[] args) {
int i;
for(i=0; i
if(i == 2){
continue;
}
System.out.println("現在処理の回数=" + i);
}
2015年6月30日 10:36
ほぷしぃスタッフ
コメントありがとうございます。
if文の後の括弧が整合性が取れていないという指摘と思われますが
括弧が無くてもサンプルのままで動作はします。
指摘の通りの記述が、よりわかりやすい書き方です。
今後わかりやすいコード、記事になるように留意致します。
2015年7月 2日 18:43
コメントの投稿
トラックバックURL
http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1075