プログラミング基礎I(再)

山元進
for 文
 while 文
 do ~ while 文
 文のネスト
 break 文
 continue 文

for ( 初期化 ; 継続条件 ; 更新処理 ) {
繰り返し行う処理
}
何回も繰り返す処理を簡単に記述できる
※ 繰り返し行う処理が 1 文であるばあい、 { }
で括る必要はない。しかし、形式を整えるため、
いつでも { } を入れておいた方が良い。
初期化
更新処理
繰り返し行う処理
({ } の中の処理)
for
継続条件
false
for 文の次の文へ
true
初めに継続条件が false だと、
一度も「繰り返し行う処理」を実行せずに終了
class Sample1
{
public static void main(String[] args)
{
for( int i=1; i<=5; i++ ) {
// for 文中で宣言した変数 i は、for 文の中
// でしか利用できない。このブロックは for 文の中
System.out.println("繰り返しています。");
}
System.out.println("繰り返しが終わりました。 ");
}
}
init i=1
i++
System.out.println
("繰り返しています。")
for
i<=5 ?
true
false
System.out.println("繰り返しが終わりました。 ")
class Sample2
{
public static void main(String[] args)
{
for( int i=1; i<=5; i++ ) {
// 最初に実行するとき i=1
// 更新部分に i++ → 繰り返す度に i がインクリメント
System.out.println(i + "番目の繰り返しです。");
}
System.out.println("繰り返しが終わりました。 ");
}
}
for文中で変数を使うと、繰り返し回数などが示せる
class Sample2_1
{
public static void main(String[] args)
{
int i;// for 文の外で繰り返し回数の変数 i を定義することも可
for( i=0; i<5; i++ ) {
// for 文の初期化は変数の宣言ではなくても良い
System.out.println((i+1)+"番目の繰り返しです。");
}
System.out.println(i+"回繰り返しました。 ");
// for 文の外で繰り返し回数の変数 i を定義すると、
// for 文が終わった後も変数 i が利用できる
// (cf: 変数のスコープ, 生存期間)
}
}
import java.io.*;
class Sample3
{
public static void main(String[] args)
throws IOException
{
System.out.println("いくつ*を出力しますか?");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine(); // キーボードからの入力
int num = Integer.parseInt(str); // 整数に変換
for( int i=1; i<=num; i++ ) { // 入力した回数だけ繰り返す
System.out.print("*");
}
}
}
import java.io.*;
class Sample4
{
public static void main(String[] args) throws IOException
{
System.out.println("いくつまでの合計を求めますか?");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine(); // キーボードからの入力
int num = Integer.parseInt(str); // 整数に変換
int sum = 0; // この sum の宣言は for 文の中に入れられない
for( int i=1; i<=num; i++ ) { // 入力した回数だけ繰り返す
sum += i;
}
System.out.println("1から"+num+"までの合計は"+sum+"です。");
}
}
while( 継続条件 ) {
継続条件がtrueの間、繰り返し行う処理
}
while 文で継続条件が true である間、繰り返す
処理が記述できる。 条件の記述に気をつける。
※ 繰り返し行う処理が 1 文であるばあい、 { } で
括る必要はない。しかし、形式を整えるため、い
つでも { } を入れておいた方が良い。
繰り返し行う処理
({ } の中の処理)
while
継続条件
false
while 文の次の文へ
true
class Sample5
{
public static void main(String[] args)
{
int i=1;
while( i<=5 ) {
System.out.println(i+"番目の繰り返しです。");
i++;
}
System.out.println("繰り返しが終わりました。 ");
}
}
System.out.println
(i+"番目の繰り返しです。");
i++;
while
i<=5 ?
true
false
System.out.println("繰り返しが終わりました。 ")
while(継続条件){
}
は
for ( ; 継続条件 ; ){
}
と同じ
class Sample5_2
{
public static void main(String[] args)
{
int i=1;
for( ; i<=5; ) {
System.out.println(i+"番目の繰り返しです。");
i++;
}
System.out.println("繰り返しが終わりました。 ");
}
}

更新処理を忘れをしやすい

→永久に終わらない
class Sample5_3
{
public static void main(String[] args)
{
int i=1;
while( i<=5 ) {
System.out.println(i+"番目の繰り返しです。");
//i++;
}
System.out.println("繰り返しが終わりました。 ");
}
}
do {
継続条件がtrueの間、繰り返し行う処理
} while( 継続条件 ) ;
while () { } とは継続条件評価の順序が違う
→最低1回は { } 内の処理が行われる
※ 繰り返し行う処理が 1 文であるばあい、 { }
で括る必要はない。しかし、形式を整えるため、
いつでも { } を入れておいた方が良い。
do
繰り返し行う処理
({ } の中の処理)
while
継続条件
false
do~while 文の次の文へ
true
class Sample6
{
public static void main(String[] args)
{
int i=1;
do {
System.out.println(i+"番目の繰り返しです。");
i++;
} while( i<=5 );
System.out.println("繰り返しが終わりました。 ");
}
}

入れ子 = マトリョーシカ


マトリョーシカの中には小さなマトリョーシカ
典型的には for 文の中に for 文 : ネスト
if 文中に if 文などもネストという
 何段ネストしているか把握しやすく




→ インデント (字下げ)
for 文中に if 文などもネストと同様にインデント
for 文ネスト : 多重の繰り返し処理記述可能
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:JapaneseNestingDolls.jpg
(2010 Oct. 18) から引用
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%88%E3%83%AA%E3%83%A7%E3%83%BC%E3%82%B7%
E3%82%AB%E4%BA%BA%E5%BD%A2 (2010 Oct. 18) から引用
class Sample7
{
public static void main(String[] args)
{
for(int i=0; i<5; i++){
for(int j=0; j<3; j++){
System.out.println("iは"+i+":jは"+j);
}
}
}
}
class Sample8
{
public static void main(String[] args)
{
boolean bl=false;
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
if(bl){
System.out.print("-");
bl=false;
}else{
System.out.print("*");
bl=true;
}
}
System.out.print("\n");
}
}
}
import java.io.*;
class Sample9
{
public static void main(String[] args)
throws IOException
{
System.out.println("何回目でループを中止しますか(1~10)?");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine(); // キーボードからの入力
int res = Integer.parseInt(str); // 整数に変換
for( int i=1; i<=10; i++ ) { // 本来10回繰り返す
System.out.println(i+"回目の処理です。");
if( i==res ) break; // switch 文の break; と同じ意味
}
}
}
import java.io.*;
class Sample11
{
public static void main(String[] args)
throws IOException
{
System.out.println("何回目の処理を飛ばしますか (1~10)?");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine(); // キーボードからの入力
int res = Integer.parseInt(str); // 整数に変換
for( int i=1; i<=10; i++ ) { // 本来10回繰り返す
if( i==res ) continue; // 入力した回の処理を飛ばす
System.out.println(i+"回目の処理です。");
}
}
}

break;


即座に for 文を抜ける
continue;

繰り返し処理の残りの部分をスキップする
for (int i=0; i < 10 ; i++) {
処理1 …
if ( i==8 ) break;
if ( i==5 ) continue;
処理2 …
}
5 <= i <= 8 の場合
処理1は実行され、処理2は実行されない
i=8 で for 文を抜けるので、残りの(i==9の) 処理1も処理2も実行されない
for文を使うと,繰り返し処理ができる.
 while文を使うと,繰り返し処理ができる.
 do~while文を使うと,繰り返し処理ができる.
 文はネストすることができる.
 break文を使うと,繰り返し文またはswitch文
のブロックを抜け出す.
 continue文を使うと,繰り返し文の最初に
戻って次の繰り返し処理にうつる.


以下のプログラムを 、( )内に指定した文を利用して
作成せよ
適当な正の整数 N を入力し、Nを十進表示したときに、
何ケタの数になるかを求めるプログラム (while)
 適当な正の整数 N を入力し、Nを十進表示したときの、
各桁の数の和を求めるプログラム (do ~ while )
 適当な正の整数 N を入力し、Nが素数かどうかを表示
するプログラム (for および break)


次のページに続く
タブ(¥t)を使って、次のように九九の表を画
面に出力するプログラムを作成せよ。ただし、
ネストした for 文を使うこと。
1
2
3
4
5
6
7
8
9
2
4
6
8
10 12 14 16 18
3
6
9
12 15 18 21 24 27
4
8
12 16 20 24 28 32 36
5
10 15 20 25 30 35 40 45
6
12 18 24 30 36 42 48 54
7
14 21 28 35 42 49 56 63
8
16 24 32 40 48 56 64 72
9
18 27 36 45 54 63 72 81
