はじめに
コンピュータはしばしば繰り返し作業を自動化するために使用されます。エラーなくタスクを繰り返すことは、コンピュータが得意で、人間が下手なことです。条件式と同様に、ループも互いにネストすることができますが、これはプログラムの読みやすさを低下させ、性能も良くなりません。ネストされたループを避けるようにしましょう。Java には 3 種類のループがあります。この実験では、それぞれを学んでいきましょう。
コンピュータはしばしば繰り返し作業を自動化するために使用されます。エラーなくタスクを繰り返すことは、コンピュータが得意で、人間が下手なことです。条件式と同様に、ループも互いにネストすることができますが、これはプログラムの読みやすさを低下させ、性能も良くなりません。ネストされたループを避けるようにしましょう。Java には 3 種類のループがあります。この実験では、それぞれを学んでいきましょう。
コンピュータサイエンスにおける「再帰」は、問題の解が同じ問題のより小さなインスタンスの解に依存する手法です(反復とは対照的)。このアプローチは「再帰」と呼ばれ、多くの種類の問題に適用できます。再帰はコンピュータサイエンスの中心的な考え方の一つです。再帰の力は、有限の数の文で無限のオブジェクトを定義できる可能性に明らかにあります。同じように、無限の計算を、有限の再帰プログラムで記述できます。たとえこのプログラムに明示的な反復が含まれていなくてもです。
例:
/home/labex/project/recursionTest.java
ファイルに次のコードを記述します。
public class recursionTest{
public static int fibonacci(int n){
if(n<=2){
return 1;
}else{
return fibonacci(n-1)+fibonacci(n-2);
}
}
public static void main(String[] args){
int res = recursionTest.fibonacci(10);
System.out.println(res);
}
}
出力:
次のコマンドを使用して recursionTest.java
ファイルを実行します。
javac /home/labex/project/recursionTest.java
java recursionTest
出力を見てください。
55
whileループに入るときは、まず条件がチェックされます。whileループは、条件が偽になるまで常に実行されます。構文は次のようになります。
例:
/home/labex/project/whileTest.java
ファイルに次のコードを記述します。
public class whileTest
{
public static void main(String[] args)
{
int x = 1;
// xが3より大きくなったときに終了し、内側のコードは合計3回実行されます。
while (x <= 3)
{
System.out.println("x = " + x);
// 次の反復のためにxの値を1つずつ増やします
x++;
}
}
}
出力:
次のコマンドを使用して whileTest.java
ファイルを実行します。
javac /home/labex/project/whileTest.java
java whileTest
出力を見てください。
x = 1
x = 2
x = 3
このループはwhileループと非常に似ていますが、1点違いがあります。条件の値がどんなになろうとも、ループは必ず少なくとも1回は実行されます。その後、条件がチェックされます。ですから、場合によってはいくつかの状況に適さないかもしれません。構文は次の通りです。
例:
/home/labex/project/doWhileTest.java
ファイルに次のコードを記述します。
public class doWhileTest
{
public static void main(String[] args)
{
int x = 1;
do
{
// 以下のコードが最初に実行され、その後条件がチェックされます。
System.out.println("x = " + x);
x++;
}
while (x <= 3);
}
}
出力:
次のコマンドを使用して doWhileTest.java
ファイルを実行します。
javac /home/labex/project/doWhileTest.java
java doWhileTest
出力を見てください。
x = 1
x = 2
x = 3
forループは次のようになります。
例:
for (init expression; condition expression; increment expression)
{
// statements here
}
forループの開始を示す初期化条件は1回だけ実行されます。条件式は、ループに入る前に毎回チェックされます。これはループの終了条件をテストするために使用され、ブール値を返す必要があります。条件が真になると、ループ内の文が実行されます。その後、インクリメント式が実行されて、次の反復のためにカウンターやその他の変数の値が変更されます。
例:
/home/labex/project/forTest.java
ファイルに次のコードを記述します。
public class forTest
{
public static void main(String[] args)
{
// forループはx=1のときからx<=3のときまで実行されます
for (int x = 1; x <= 3; x++) {
System.out.println("x = " + x);
}
}
}
出力:
次のコマンドを使用して forTest.java
ファイルを実行します。
javac /home/labex/project/forTest.java
java forTest
出力を見てください。
x = 1
x = 2
x = 3
ループ本体の中でいつでも、ifブロックの文の中で continue
や break
のようなコードを使ってループを抜けることができます。break
は全体のループを抜けますが、continue
は現在の反復を終了して、次の反復を実行します(条件が真の場合)。
例:
/home/labex/project/loopTest.java
ファイルに次のコードを記述します。
public class loopTest
{
public static void main(String[] args)
{
// forループはx=1のときからx<=3のときまで実行されます
for (int x = 1; x <= 3; x++) {
if(x==2){
// 全体のループを抜ける
break;
// continueは現在の反復のみを終了し、次の反復を行います
// break式を削除してcontinueを使用することができます。出力を見てください。
// continue;
}
System.out.println("x = " + x);
}
}
}
出力:
次のコマンドを使用して loopTest.java
ファイルを実行します。
javac /home/labex/project/loopTest.java
java loopTest
出力を見てください。
x = 1
この実験では、3種類のループを学びました。forループとwhileループは学びやすいですが、do-whileループは論理的にはあまり完璧ではありません。非常に慎重に選択する必要があります。