バグを直す |
IDEの
メインプロジェクトを
「KotoQuiz」に
戻してね。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
じゃあ、
ゲーム作りに戻って
バグを直していこう。
今回のバグは
エラーメッセージが表示されて
いないから、論理エラーって
ことだな。
どこか作り方がおかしい
可能性が高いね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
 |
そっか
戻しとかなきゃ。 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
現状を整理してみよう。
今回の症状は
「3問目で終わって、
4問目が遊べないで
ゲームが終わる」
ということ。
つまり、怪しいところは
「なぜ3問目で終わるのか?」
ってことだ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
そっか!
「3問目の終了判定」
を調べれば、原因が
分かるかもしれないんだね! |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
整理する事は
凄い重要!
聞いてる? |
 |
|
 |
推理小説
みたい! |
|
|
|
 |
|
 |
|
問題を整理する
問題点の整理
・ |
3問目までは正常に遊べる |
・ |
3問目でゲームが終わる |
・ |
4問目が遊べない |
|
↓ |
エラーの原因を考える
3問目で「終わる」のがおかしい
|
↓ |
エラー原因の推測
3問目の時点の終了判定の処理に問題がある?
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
なぽちゃん。
じゃあ、解答処理の
終了判定のところに
ブレークポイントを
立てて実行するね。
|
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
ここで
いいかな? |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
おっ、いいんじゃね。
そこに立てれば
ループフラグを
立てるかどうかで
終了するか分かるよな。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
エディタウィンドウ |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
じゃあ、実行するね。
えーと、まずキー入力があって、
1問目に答えて・・・
解答処理に行って・・・
これでブレークポイントで
止まったでしょ。
今はループの1回目だから
1問目の終わりだね。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
ウォッチしてみると・・・
nowQuizNumは上の行で
問題を1つ進めた後だから
「1」でいいな。
うん、1回目に間違いない。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
エディタウィンドウ |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
じゃあ、ステップ実行で
ここから1行進めてみるね。
関数の行じゃないから
ステップオーバーでも
ステップインでも同じだよね? |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ああ、大丈夫だよ。
えっと・・・
ifのブロックには
入らないで次の行
に行ったな。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
入りません
でした。 |
 |
|
 |
おっけ。 |
|
|
|
 |
エディタウィンドウ |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
うーんと、
3回目のループか・・・
3問目まで進めるには
どうしたらいいかな。
1行づつステップ実行
するの? |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
1行づつ
進めるのだと
大変だね。 |
|
他にもやり方
あるけどね。
2回ぐらいだから
これでいいだろ。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
「継続」ボタンを押せばいい。
このボタンを押すと、その場所
から実行が再開される。
今回の場合、キー入力があるから
そこまで一気に進むよ。
あとはさっきと同じ。
キー入力して、確認して・・・
それを2回やれば
合計3回目のループになるね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
再開して、
キー入力で止まったら
また問題に答えて・・・
繰り返して・・・。
えっと、
これで3回目のループ・・・
nowQuizNumも「3」だから
問題も3問目。
うん、ちゃんとなってる。
進めたらどうなるんだろう。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
どうなる
かなー。
ドキドキ
するー。 |
|
|
|
|
|
 |
エディタウィンドウ |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
よーし、
ステップ実行で1行進めるよ。
・・・・・・ん?
あれ?あれれれ??
なんでー!
終了判定のブロックに
入っちゃたよー!
これじゃ、
3問目で終わっちゃうよ! |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
どうして
入っちゃったのか
終了判定の
条件式の変数を
ウォッチしてみよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
どうしてー
??? |
 |
|
 |
いえーい |
|
|
|
 |
エディタウィンドウ |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
そうだ、条件式見なきゃ。
えっと、nowQuizNumは
「3」だったから、3問目でOKだよね。
あとは・・・
一応、定数も見とこ・・・
あれ?定数 QUIZ_MAXの数が
「3」になってるよ・・・・
・・・これって問題の数だよね?
あー!!分かった!
この定数が間違ってるんだ! |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
そうだった! |
|
|
|
 |
エディタウィンドウ |
|
|
何度も
注意した
のにね。。。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
そういうこと。
問題の最大数は
4問にしたから4にしないと。
問題を追加したら
ここの数も増やさないと
だめだって言ったでしょ。
分かれば、
これも単純な間違いね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
嬉しいー!
ありがとー |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
やったー!
QUIZ_MAXを4にして
実行したら直った!
4問目ちゃんと出たよ! |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
 |
はあー
ごくろうさん。
俺。 |
|
|
|
 |
|
 |
|
クイズゲーム完成 モード処理関数化
(KotoQuizのKQMain.java)12行目~ |
|
・・・ |
|
|
|
012 |
|
public class KQMain
{ |
|
013 |
|
|
|
014 |
|
//******************************************** |
|
015 |
|
//
定数 |
|
016 |
|
//******************************************** |
|
017 |
|
//入力・表示処理モード |
|
018 |
|
private
static final
int EXEC_MODE_QUIZ = 1;//問題処理モード |
|
019 |
|
private
static final
int EXEC_MODE_CHECK = 2;//解答処理モード |
|
020 |
|
private
static final
int QUIZ_MAX =
4;//問題数 |
|
・・・ |
|
|
|
|
黄色の部分を修正して実行して下さい。 |
|
|
 |
|
 |
|
|
 |
実行結果(出力ウィンドウ) |
|
|
|
当たり前だけど
意外とできない
もんなんだよね。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
今回のデバッグ方法のポイント。
今まで正常に動いていたものが
変更したらおかしくなった場合、
変更箇所に原因の元がある。
改変前と後の違いを
よく考えてみよう。
変更箇所に「関係する処理」に
注目して「問題の整理」をしてね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
今回の場合
問題数を増やして
おかしくなったから・・・。
問題数の関係の処理が
怪しかったってことね。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
うーん、
なるほど。 |
|
|
|
 |
|
 |
|
デバッグのポイント
・ |
改変前のコードと後のコードの違いを考える |
・ |
変更箇所に関係する処理に注目する |
・ |
問題を整理する |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
これで今回の
デバッグは終わり。
バグは、時には解明するまで
何日もかかる事もある。
どこに原因があるのか
的確な「切り分け」が
必要になってくるんだ。
徐々に詳しくなっていこうな。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
いろいろ勉強
していこう。 |
 |
|
 |
はいっ。 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
さあ、ゲームが
直ったところで!
4問目のクイズの答えは
なんでしょーか! |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
間違ってたら
お尻ペンペン
しちゃうぞ! |
 |
|
 |
「お前の問題」
なんて
分かるかよ。。。 |
|
|