練習問題 つづき |
|
 |
|
 |
|
練習問題4 ことの解答(KotoTest12のKNMain.java)17行目~ |
|
・・・ |
|
|
|
017 |
|
public static void
main(String[] args) { |
|
018 |
|
// TODO code
application logic here |
|
019 |
|
|
|
020 |
|
//カウンター用の変数を宣言・初期化 |
|
021 |
|
int
i = 0; |
|
022 |
|
|
|
023 |
|
while(true){ |
|
024 |
|
//現在のカウントをロケットの号数に補正 |
|
025 |
|
int
num = i + 1; |
|
026 |
|
|
|
027 |
|
//ロケットを打ち上げるメッセージを表示 |
|
028 |
|
System.out.println("ロケット" +
num + |
|
029 |
|
"号機を打ち上げました。"); |
|
030 |
|
|
|
031 |
|
//最後にカウントをアップする |
|
032 |
|
i = i +
1; |
|
033 |
|
|
|
034 |
|
//終了チェック処理 |
|
035 |
|
if(i >= 10){ |
|
036 |
|
break; |
|
037 |
|
} |
|
038 |
|
} |
|
039 |
|
|
|
040 |
|
//終了メッセージ |
|
041 |
|
System.out.println("計画完了"); |
|
042 |
|
|
|
043 |
|
} |
|
・・・ |
|
|
|
|
黄色の部分を追加して下さい。 |
|
|
 |
|
 |
|
|
 |
実行結果(出力ウィンドウ) |
|
|
細かい事
はいいや。
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
うん、
いいんじゃないかな。
結果もforのテストの時と
同じだし、さっきの変数の
宣言の間違いも直ってる。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
さっきは、カウンター用の変数を
ブロック内で宣言してるから
無限ループになっちゃったんだね。
ブロック内で宣言した変数の
有効範囲は、ブロック内だけ
だもんね。
ループする度に、カウンターが
初期化されて0になっちゃって
たんだ。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
気をつけるね。 |
|
|
|
 |
|
 |
|
無限ループの原因 |
|
練習問題4 ことの解答:仮(KotoTest12のKNMain.java)17行目~ |
・・・ |
|
|
|
020 |
|
while(true){ |
|
021 |
|
//カウンター用の変数を宣言・初期化 |
|
022 |
|
int
i = 0; |
|
・・・ |
|
|
|
|
whileループの中でカウンター用の変数を宣言していたため
ループする度に初期化されて0になってしまっていた。 |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
今回はtrueで
whileループ
しっぱなしにして・・・
for文と同じように
カウントアップしてから
終了チェックするように
最後にしたよ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
 |
|
 |
|
練習問題4 ことの解答(KotoTest12のKNMain.java)17行目~ |
|
・・・ |
|
|
|
017 |
|
public static void
main(String[] args) { |
|
018 |
|
// TODO code
application logic here |
|
019 |
|
|
|
020 |
|
//カウンター用の変数を宣言・初期化 |
|
021 |
|
int
i = 0; |
|
022 |
|
|
|
023 |
|
while(true){ |
|
024 |
|
//現在のカウントをロケットの号数に補正 |
|
025 |
|
int
num = i + 1; |
|
026 |
|
|
|
027 |
|
//ロケットを打ち上げるメッセージを表示 |
|
028 |
|
System.out.println("ロケット" +
num + |
|
029 |
|
"号機を打ち上げました。"); |
|
030 |
|
|
|
031 |
|
//最後にカウントをアップする |
|
032 |
|
i = i +
1; |
|
033 |
|
|
|
034 |
|
//終了チェック処理 |
|
035 |
|
if(i >= 10){ |
|
036 |
|
break; |
|
037 |
|
} |
|
038 |
|
} |
|
039 |
|
|
|
040 |
|
//終了メッセージ |
|
041 |
|
System.out.println("計画完了"); |
|
042 |
|
|
|
043 |
|
} |
|
・・・ |
|
|
|
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
それから
終了チェックのやり方を変えたよ。
for文の終了チェックが
「i が 10未満なら実行」だったので、
while文では逆にして
「i が 10以上なら終了」にしました。
だって、i < 10 のままじゃ、
最初カウンターが 0 だから
1回目で終わっちゃうもんね。
i >= 10 なら
0~9までは大丈夫だよね。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
やたっ |
|
よくできました。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
お、よく気付いたな。
ちゃんと、
「未満」と「以上」の
違いも理解してるな。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
練習問題4 ことの解答(KotoTest12のKNMain.java)34行目~ |
|
・・・ |
|
|
|
034 |
|
//終了チェック処理 |
|
035 |
|
if(i >= 10){ |
|
036 |
|
break; |
|
037 |
|
} |
|
・・・ |
|
|
|
|
i が 10以上なら 終了 |
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
面白いよな。
forもwhileも、
同じ内容の処理なのに
終了条件は正反対だ。
判定の視点が違うんだよな。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
面白いね! |
 |
|
|
|
|
 |
|
 |
|
終了判定の考え方の違い |
|
forでは「実行している間」で考えている |
「10未満の間」実行する |
「未満」かチェックする |
|
|
whileでは「終了する時点」で考えている |
「10以上なら」終了する |
「以上」かチェックする |
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
それから、
for文の条件式を
そのまま使いたければ
こんな書き方もできるね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
そっか、
! 演算子で「以外なら」
に変えたんだ。
これでも「10以上なら」と
同じ意味になるんだね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
他にも
書けるって例ね。
お前の
やり方の方が
素直でいいと思うよ。 |
 |
|
|
|
|
 |
|
 |
|
練習問題4 ことの解答(KotoTest12のKNMain.java)34行目~ |
|
・・・ |
|
|
|
034 |
|
//終了チェック処理 |
|
035 |
|
if(!(i < 10)){ |
|
036 |
|
break; |
|
037 |
|
} |
|
・・・ |
|
|
|
|
「i が10以下 以外 なら」
終了 の意味になる
(つまり「i が10以上なら」と同じ意味) |
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
他にどんな書き方が
できるかいろいろ
試してみてね。
|
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
いろいろ
よくできました。
はなまるです。 |
|
ありがと。
難しかったから
うれしいな。。。 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
でも、コードって、
本当にいろいろな
書き方ができるんだね。
どういう書き方しようか
すごい迷っちゃった。
うーん、難しいなあ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
気にするなって。
自由に書ける分、どうしていいのか
分からないかもしれないけど
こういうのは慣れだから。
経験を積めば分かってくよ。
どれが正解ってこともないしね。
今回のテストも
いろいろな形で書けるからね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
これで
いいのかなって
悩んじゃう・・・
あたしに
できるかな・・・。 |
 |
|
 |
みんな、
最初はこんな
もんだって。 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
今回、制御文を見たことで
できることが少し見えてきた
はずだ。
これから
必要に応じて作っていくことで
自然にいろいろな形で書ける
ようになるよ。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
今は基本を
しっかり
押さえておこう。
焦らずにね。 |
|
まずは基本ね。 |
 |
|
|
|
めずらしく
弱気ね。
ギブね? |
 |
|
 |
違うもんー。 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
あと、制御文には
switch文やfor文、while文で使える
ラベルという機能があるんだ。
でも、これは今回は見ないで
別のといっしょに見ることにしよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
その方が
分かりやすい
からね。
もうちょっと
あとね。 |
 |
|
 |
お願いします。 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
さあっ、
これで制御文については
大体見終わったな。
まだ見ていない他の制御文は、
今後その都度見ていくよ。
最後に、制御文と一緒に使うと
便利な簡略記法を見るぞ! |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
はあー。あと少し。
今日はほんと
長かったなあ。。。 |
 |
|
 |
ありがとね。
お疲れ様。。。 |
|
|