広告
  サイト内検索:
<Let's create a game!> Introduction of programming for absolute beginners English
 

SESSION 11 その19
練習問題 つづき

今回のやり方は
既存の処理を、
関数で「分離」する

時の例ね。
参考に
してねー
 
元々ある処理を
関数にするんだね。


まず、関数の「枠」を
作っちゃおう。


引数は無くていいよ。
えーと、関数名を
checkAnswerData()って
書けばいいんだね。

ブロックの中は空っぽね。
メイン関数の
下でいいや。
はいっ。
 

クイズゲーム 完成(モード別処理)
解答チェック処理追加中
(KotoQuizのKQMain.java)180行目~
 
・・・      
180       }  
181      
182       private static int checkAnswerData(){  
183      
184       }  
・・・    
関数の枠を作る
 
黄色の部分を書き写して下さい。


次に、関数のブロックに
今回移したい処理を
コピペしちゃおう。

今回は
1問目のcase 0 の処理を
コピペしよう。
えっ、えー!

エラーだらけに
なっちゃってるよー。
まったくもってー
気にしないー。
真っ赤っか
だよー
 

クイズゲーム 完成(モード別処理)
解答チェック処理追加中
(KotoQuizのKQMain.java)180行目~
 
・・・      
180       }  
181      
182       private static int checkAnswerData(){  
183      
184           //解答チェック  
185           if(inputNum == 3){  
186               System.out.println("やったね!正解");  
187               correctTotal += 1;//正解数加算  
188           }else{  
189               System.out.println("残念!不正解");  
190           }  
191      
192       }  
・・・    
処理内容を写す
 
黄色の部分のように100~106行目をコピペして下さい。


じゃあ、
関数のエラーを解消していこう。

エラーの原因はこの2つだ。
・宣言されていない変数がある
・戻り値が無い
なるほど。
この赤い変数は、関数の
中で宣言されてないもんね。

戻り値の型も、
int型で定義してるのに
まだ戻り値がないね。
そいうこと
ですのー。
そいうこと
ですかー。
 
エラーのコード
エディタウィンドウ


問題解消!
まず、宣言されてない
変数を宣言しちゃおう。


これには引数を使う。

コピペした処理の内容を
よく見てくれ。

このエラーの変数は、
なんで宣言されて
いないんだ?
 
え、えーと・・・

そっか!
これはメイン関数で
宣言された変数
なんだね!

この変数の値が
関数の処理には必要
なんだ。

変数correctTotal。
正解数の加算に必要でしょ。

あとは、問題をチェックするから
問題の入力番号。
変数inputNumね。
   
 
 

クイズゲーム 完成(モード別処理)
解答チェック処理追加中
(KotoQuizのKQMain.java)180行目~
 
・・・      
180       }  
181      
182       private static int checkAnswerData(){  
183      
184           //解答チェック  
185           if(inputNum == 3){  
186               System.out.println("やったね!正解");  
187               correctTotal += 1;//正解数加算  
188           }else{  
189               System.out.println("残念!不正解");  
190           }  
191      
192       }  
・・・    
呼出元から受け取りたい値を考える
 
黄色はメイン関数にある変数


その2つの変数を引数に書こう。

これで、変数の宣言と
値を貰うことが同時にできる。


関数を区別するために、
引数は日本語ローマ字に
名前を変えてね。
えっと、
正解数の変数は
seikaiGoukei
にして・・・

問題の入力番号は
kaitouBangou
でいいかな。
別の関数だから
そのままでも
いけるけどね。
どっちも
int型ね。
 

クイズゲーム 完成(モード別処理)
解答チェック処理追加中
(KotoQuizのKQMain.java)180行目~
 
・・・      
180       }  
181      
182       private static int checkAnswerData(int kaitouBangou,int seikaiGoukei){  
183      
184           //解答チェック  
185           if(inputNum == 3){  
186               System.out.println("やったね!正解");  
187               correctTotal += 1;//正解数加算  
188           }else{  
189               System.out.println("残念!不正解");  
190           }  
191      
192       }  
・・・    
引数を書く
 
セッションでは引数名を呼出元と変更して書きます
(変更しないでもできます)

inputNum → kaitouBangou
correctTotal → seikaiGoukei


これで、呼び出し元から
2つの値を受け取れる
ようになったね。


という訳で、
エラーになってる変数名を
引数名に全部置き換えよう。
間違えないように
慎重にね!
 
えっとー、
引数と同じように、
日本語ローマ字の
変数名に変えれば
いいんだね?
 

クイズゲーム 完成(モード別処理)
解答チェック処理追加中
(KotoQuizのKQMain.java)180行目~
 
・・・      
180       }  
181      
182       private static int checkAnswerData(int kaitouBangou,int seikaiGoukei){  
183      
184           //解答チェック  
185           if(kaitouBangou == 3){  
186               System.out.println("やったね!正解");  
187               seikaiGoukei += 1;//正解数加算  
188           }else{  
189               System.out.println("残念!不正解");  
190           }  
191      
192       }  
・・・    
変数を、対応する引数名に変更する
 
色のついた部分を変更してください。

inputNum → kaitouBangou
correctTotal → seikaiGoukei


あ、やった!!

エラーが消えた!
それで、
引数を使って処理を
実行できるようになった。


あとは・・・
今回の場合は、
加算した正解の合計数
を戻してやらないとな。

戻り値を書けば、
分離の一段階目完了。
やたっ。
戻り値は
大丈夫だろ。
 

クイズゲーム 完成(モード別処理)
解答チェック処理追加中
(KotoQuizのKQMain.java)180行目~
 
・・・      
180       }  
181      
182       private static int checkAnswerData(int kaitouBangou,int seikaiGoukei){  
183      
184           //解答チェック  
185           if(kaitouBangou == 3){  
186               System.out.println("やったね!正解");  
187               seikaiGoukei += 1;//正解数加算  
188           }else{  
189               System.out.println("残念!不正解");  
190           }  
191      
192           //結果を返す  
193           return seikaiGoukei;  
194       }  
・・・    
結果の値が必要な場合は戻り値を書く
 
黄色の部分を書き写して下さい。



手っ取り早く
やるならね。

correctTotal
inputNum

をそのまま
引数名にすれば
いきなりエラー
解消できるよ。

おしまい。
なんで
小声なの?


2問目の
正解は「1番」
だよ・・・。
でも・・・
なぽちゃん。

この関数は
正解番号が「3番」しか
チェックできないよ。


2問目とかに使ったら
正解が3番でチェックが
おかしくなっちゃうよ?
 
だったら、
正解番号も
「分離」
してやれば
いいじゃん。
  ところてん
とうふ
こんにゃく
ましまろ
ぼいんぼいん

共通してるのは
なあんだ?
 
 

クイズゲーム 完成(モード別処理)
解答チェック処理追加中
(KotoQuizのKQMain.java)180行目~
 
・・・      
180       }  
181      
182       private static int checkAnswerData(int kaitouBangou,int seikaiGoukei){  
183      
184           //解答チェック  
185           if(kaitouBangou == 3){  
186               System.out.println("やったね!正解");  
187               seikaiGoukei += 1;//正解数加算  
188           }else{  
189               System.out.println("残念!不正解");  
190           }  
191      
192           //結果を返す  
193           return seikaiGoukei;  
194       }  
・・・    
解答番号 3 がコードに直接書き込まれているため
1問目以外のチェックができない。
どうすればいい?


「分離」するには・・・

何を「使う」?
分離???
使う???

・・・あ。

分かったかも!!
がんばってねー

合言葉は
ぼいんぼいん
に決まりー

ウヒヒ
ありがとっ!

頭を柔らかくね!



あ、そっれ!

頭をー

ぼいん
ぼいんー
もおー!

うーるさーいー


ぼいん
ぼいん
ぼいん
ぼいん


ぼ・・い・・・


もう二度と
しない・・・

スマン・・・
な、なんで
あたしに
謝るのー!!!

さいてー!
さいてー!
さいてー!

 
 

広告
home もくじ 前のページを読む 次のページを読む
  サイト内検索:
広告
お勧めの姉妹サイト
leafdays - リーフデイズ 超初心者のための園芸入門 - 楽しい趣味のガーデニング -
広告