狠狠撸

狠狠撸Share a Scribd company logo
第2回 繰り返しとネスト+α
参考書:スッキリわかるJava入門 第2版
目次
? while
? for
? スコープ
? ネスト
? 繰り返しの中断
? 演習
2
目次
? while
? for
? スコープ
? ネスト
? 繰り返しの中断
? 演習
3
while
英語では「~する間」などの意味
「繰り返し」を行う方法のひとつ
while( 条件式 ){
「条件式」がtrueのときに
繰り返される処理;
}
4
似てる?
while( 条件式 ){
「条件式」が
trueのときに
行われる処理;
}
5
if( 条件式 ){
「条件式」が
trueのときに
行われる処理;
}
フローチャート
プログラムの流れを図で示したもの
6
while開始
while終了
条件式
処理
true
false
do-while
条件式の判定よりも先に処理をする
do{
最低でも1回は行われる処理;
} while( 条件式 );
7
フローチャート
8
do-while開始
do-while終了
条件式
処理
true
false
実演
9
実演
10
実演
11
実演
12
実演
13
実演
14
実演
15
実演
16
バラバラ
17
目次
? while
? for
? スコープ
? ネスト
? 繰り返しの中断
? 演習
18
for
英語では「~へ向けて」などの意味
多くの場合、回数が決められた繰り返しを行う
for( 初期化; 繰り返し条件; 繰り返し時の処理 ){
繰り返す処理;
}
19
whileで言うと
20
初期化
繰り返し時の処理
繰り返し条件
forで「10回繰り返す」
for( int i = 0; i < 10; i++ ){
System.out.println( i + “回目” );
}
21
こんなことも可能
22
こんなことも可能
23
フローチャート
24
for開始
for終了
初期化
繰り返し時の
処理
繰り返す処理
繰り返し
条件
true
false
実演
25
実演
26
実演
27
実演
28
「i」の使える範囲
29
「i」の使える範囲
30
目次
? while
? for
? スコープ
? ネスト
? 繰り返しの中断
? 演習
31
スコープ
変数が利用可能な範囲のこと
変数の寿命、とも言われる
ブロック内で宣言された変数は
そのブロックが終わると同時に消滅する
32
ブロック
{ }の中のこと
33
ブロック
forでも考える
34
ネストは「forとifの合わせ技もできる!」とかって言って、「今までは
mainの中にifとかforとか書いてきた。同じようにforの中にifとか、ifの
中にforとか書ける」っていう感じで実際に書く
で、forの中のforだけちょっとややこしいってことも説明
35
目次
? while
? for
? スコープ
? ネスト
? 繰り返しの中断
? 演習
36
ネスト
forやifの合わせ技
入れ子、とも言う
ifの中のfor
ifの中のif
forの中のif
forの中のfor
37
ifの中のfor
38
ifの中のfor
39
ifの中のif
40
ifの中のif
41
forの中のif
42
forの中のif
43
forの中のfor
44
forの中のfor
45
forの中のfor
46
「i」:0回目
「i」:1回目
「i」:2回目
「深い」ネスト
47
目次
? while
? for
? スコープ
? ネスト
? 繰り返しの中断
? 演習
48
break
最も内側の繰り返しブロックから抜け出す命令
無限ループからも抜け出せる
break;
49
実演
50
実演
51
continue
今の周回を中断して、次の周回に進む
繰り返しの一部を飛ばしたいときに使える
continue;
52
実演
53
実演
54
目次
? while
? for
? スコープ
? ネスト
? 演習
55
演習①
int型の変数num1とnum2を用意し、それらに好きな値を入れる。
whileの中でどちらか一方の値を変化させ、2つの変数の値が一致し
たとき、whileから抜け出すプログラムを作成せよ。ただし、ネストして
はいけない。
56
演習②
forを用いて、5の階乗を計算するプログラムを作成せよ。
※階乗:「5!」で「5の階乗」と読み、意味は
5×4×3×2×1
である。
57
演習③
forのネストを利用して、次のページのように出力を行うプログラムを
作成せよ。
58
演習③
59

More Related Content

More from XMLProJ2014 (20)

闯补惫补班讲义资料第3回
闯补惫补班讲义资料第3回闯补惫补班讲义资料第3回
闯补惫补班讲义资料第3回
XMLProJ2014
?
第1回闯补惫补讲义资料
第1回闯补惫补讲义资料第1回闯补惫补讲义资料
第1回闯补惫补讲义资料
XMLProJ2014
?
00环境构筑
00环境构筑00环境构筑
00环境构筑
XMLProJ2014
?
Mash up awards(クリスマス会)
Mash up awards(クリスマス会)Mash up awards(クリスマス会)
Mash up awards(クリスマス会)
XMLProJ2014
?
きのこたけのこ戦争
きのこたけのこ戦争きのこたけのこ戦争
きのこたけのこ戦争
XMLProJ2014
?
クリパ用尝迟2014
クリパ用尝迟2014クリパ用尝迟2014
クリパ用尝迟2014
XMLProJ2014
?
ポケモン解説
ポケモン解説ポケモン解説
ポケモン解説
XMLProJ2014
?
クリスマス会尝迟
クリスマス会尝迟クリスマス会尝迟
クリスマス会尝迟
XMLProJ2014
?
一年ツイッター
一年ツイッター一年ツイッター
一年ツイッター
XMLProJ2014
?
颁++班
颁++班颁++班
颁++班
XMLProJ2014
?
颁#班
颁#班颁#班
颁#班
XMLProJ2014
?
奥别产班
奥别产班奥别产班
奥别产班
XMLProJ2014
?
Web 11
Web 11Web 11
Web 11
XMLProJ2014
?
Web 09
Web 09Web 09
Web 09
XMLProJ2014
?
础苍诲谤辞颈诲班第4回
础苍诲谤辞颈诲班第4回础苍诲谤辞颈诲班第4回
础苍诲谤辞颈诲班第4回
XMLProJ2014
?
Web 10
Web 10Web 10
Web 10
XMLProJ2014
?
OpenSource
OpenSourceOpenSource
OpenSource
XMLProJ2014
?
百合について
百合について百合について
百合について
XMLProJ2014
?
Web 08
Web 08Web 08
Web 08
XMLProJ2014
?
Web 08
Web 08Web 08
Web 08
XMLProJ2014
?

闯补惫补班讲义资料第2回

Editor's Notes

  • #3: ここからプログラムの動きが多少複雑になってくる 覚えることは少ないけれど、流れをきちんと追えるよう、頭を使う
  • #5: 条件式がtrueである限り、処理を繰返し続けるので、whileの中で条件式に何らかの影響を与えていかないと、いわゆる「無限ループ」に陥る 逆に言えば、whileで無限ループが作れる。たまにやる。 そういうときはswitch文で使ったbreakが役立つ breakは{}から抜け出す命令
  • #6: 形は何となく似てる でも「繰り返す」ので、プログラムの動きはちょっと複雑
  • #7: フローチャート:プログラムの流れを図で示したもので、決まった書き方や図の使い方がある。結構使われるけど複雑なものではなく、詳しくなくても何となくわかるので何かと便利。 whileが開始されると、まず条件式の判定 trueなら処理が行われ、falseなら終わる 判定→処理の流れが、falseになるまで繰り返される そのため、条件式が最初からfalseだった場合、処理を行わずに終了する
  • #8: 条件式の判定に関わらず、最低でも1回は処理を必ず行ってほしい、という場合に使える 最後に「;」をつけなければならないことに注意
  • #9: do-whileが開始されると、まず処理が行われる そのあとに条件式の判定が行われ、trueならもう一度処理、falseなら終わる whileでは判定→処理の流れだったが do-whileでは処理→判定の流れなので、確実に一度は処理が行われる
  • #17: 0から始まって1ずつ増えていくので0~9の10回であることに注意
  • #18: 10回繰り返すために使う 変数、条件、処理 がバラバラになっている 今は短くてシンプルだからいいけど、もっと複雑なプログラムになってくると、わかりにくい
  • #20: 初期化:繰り返しの軸となる変数を作る 繰り返し条件:処理をするかどうか、初期化した変数を基準に判定するための条件式 繰り返し時の処理:繰り返す処理が行われた後、繰り返し条件に影響を与えるような変化を初期化した変数に与える いまいちピンとこないかもしれないので、whileで見てみる
  • #21: 初期化:繰り返しの軸となる変数を作る 繰り返し条件:処理をするかどうか、初期化した変数を基準に判定するための条件式 繰り返し時の処理:繰り返す処理(今回はsysoutで文字列を出力)が行われた後、繰り返し条件に影響を与えるような変化を初期化した変数に与える これらをforにしてみると
  • #22: 初期化:繰り返しの軸となる変数を作る 繰り返し条件:処理をするかどうか、初期化した変数を基準に判定するための条件式 繰り返し時の処理:繰り返す処理(今回はsysoutで文字列を出力)が行われた後、繰り返し条件に影響を与えるような変化を初期化した変数に与える ちなみに、「i」というのも変数だから名前はなんでもいい。繰り返しの基準にするだけだから適当に1文字でもいい、という感じなだけ ただし、この「初期化」「繰り返し条件」「繰り返し時の処理」の説明はあくまで「基本的にはこういうもの」というだけ
  • #23: 「初期化」、「繰り返し条件」、「繰り返し時の処理」の基本的な役割を全て無視して、こんなことをしても大丈夫 初期化:「i」は繰り返しの軸になってない 繰り返し条件:初期化した変数使ってない 繰り返し時の処理:繰り返し条件に影響を与えない 今回は全く無意味なものだが、場合によっては、あえて無視することで良くなることもある 要するに、基本的な書き方だけでなく、色々と手を加えて柔軟な処理が行えることも覚えておこうという話
  • #24: 実行结果はjが10で初期化されているので、もちろん「何も表示されない」
  • #25: 左上から始まり、右下で終わる 同じ色の丸へ繋がっている 「初期化」はforの最初に1回だけ実行される 「繰り返し条件」は「繰り返す処理」の前。forでは、do-whileのように後で判定することはできない。 「繰り返し時の処理」は「繰り返す処理」が終わった後に実行される。
  • #26: さっきまでは0から1ずつ増えていたが、减らしていくことももちろんできる
  • #27: 10から始まり、変数「颈」の値を出力した后、2ずつ减らされている
  • #28: 全く意味がないけれど、whileっぽく書くことだってできる 「初期化」と「繰り返し時の処理」が省略され、それぞれ別の場所に書かれている ちなみに、「初期化」「繰り返し条件」「繰り返し時の処理」の3つすべてを省略して、2つの「;」だけを書くと、while(true)のときと同じように無限ループになる
  • #30: さりげなく使っている「i」だが、使える範囲は限られている 10回繰り返した後、最後に「10回繰り返した」と出力しようと思って、「i」を使おうとした forの中なら何も言われないけど、forの外だと赤い波線が引かれる
  • #31: 赤い波線が引かれた状態で実行すると、このようにエラーが出る 「iを変数に解決できません」とはつまり、「iなんて名前の変数は存在しないので使えない」ということ ?「i」(forの最初で初期化した変数)はforの中でしか使えない! 実は、今まで使ってきた普通の変数にも、「使える範囲」というものが存在する
  • #33: ブロックという新しい単語が出てきたが、なんてことはない、「{}」の中、という意味 詳しくは次のページ
  • #34: 分かり易いifで考える 変数numを用意して、それが0のときはifの中に入り、sumという変数を用意して、sumの値ぶんnumに足す。最後に、sumぶん足した結果numはどれくらいになったかを出力しようとした 赤い枠はmainのブロック、水色の枠はifのブロック 変数numはmainのブロックに所属しているため、消滅するのはmainの「}」の後 しかし変数sumはifのブロックに所属しているため、消滅するのはifの「}」の後 そのあとでsumを使おうとしても、消滅してしまっているから使えない、ということ
  • #35: 蹿辞谤の场合、「颈」は一见、蹿辞谤のブロックには所属していないように见えるが、フローチャートにも书いたように、この「颈」は蹿辞谤の処理が开始された后に作られる。そのため、厳密にはブロックに入っていないものの、スコープは蹿辞谤が终わるまで、となっている。
  • #38: ifとforしか出てないけど、もちろんswitchやwhileでもOK これはもう見た方が早い
  • #39: 苍耻尘が0なら、10回、2を足す
  • #41: 苍耻尘が0なら、肠补苍厂耻尘が迟谤耻别のときインクリメント、蹿补濒蝉别ならデクリメント
  • #43: 5回繰り返すうち、颈が0のときとそうでないときで出力が変わる
  • #46: 「i」を使うforの繰り返しを行う中で、「j」を使うforの繰り返しが行われる ?3×3=9
  • #47: 「i」を使うforの繰り返しを行う中で、「j」を使うforの繰り返しが行われる ?「i」は3回しか出てこないが、「i」1回ごとに「j」は3回繰り返されるので、「j」は9回出てくる。
  • #48: ifを7つ連ねてみた。この状態でもパッと見で何個あるか見辛いのに、さらに条件式とか処理とかが入ってくるとなると、とんでもない見辛さになる。 ?ネストを深くすることは極力避ける。これもまた、見やすいソースコードを作るため。
  • #49: 蹿辞谤や飞丑颈濒别から途中で抜け出す方法が、2つある
  • #50: switchでも使ったbreakという命令は、そのbreakを囲んでいる最も内側の繰り返しブロックから抜け出す、というもの これを使えば無限ループからでも簡単に抜けられる 使い方は「break;」と書くだけ
  • #51: forの2重ループになっている さらに「j」を使うforは100回も繰り返すことになっている! が、「j」を使うforに入って文字列を出力した後にすぐbreakが入る このbreakを囲んでいる最も内側の繰り返しブロックは「j」を使うfor なので、結局「すぐ脱出」と5回出力されて終わる
  • #53: continueは「今の周回を中断して、同じ繰り返しの次の周回に進む」 breakはブロックから一気に抜け出してしまったが、continueはその周回だけを中断させる 使い方はbreakと同じでただ書くだけ
  • #54: 最初、「颈」が0のときは颈蹿に入らないので「0回目」と出力されるが、そのあと、「颈」の値がインクリメントされると颈蹿の中に入るようになり、その都度肠辞苍迟颈苍耻别により中断されて蝉测蝉辞耻迟までたどり着けないので、それ以降は蹿辞谤が终わるまで何も出力されない