[[プログラミング入門(2017年度前期)]] 第2回の演習の総評です. * 全般 [#b9346ef3] ** 再提出の基準(第1回と同様) [#web9a5b1] - 必修課題(2-1〜2-4)が解けていない場合は再提出としました. - 任意課題(2-5〜2-8)が解けていない場合はその旨をコメントし,任意で再提出できることとしました. ** 課題文について [#y9c8c85f] ''課題文に書かれている通りの動きをしないプログラムを提出して再提出になっている人が非常に多いです。課題文はしっかりと読み、その通りに動作するプログラムを作成してください''。課題文の解釈が定まらない場合は、質問をするか、あるいはreadmeに曖昧である旨とどのように解釈したかを記載してください。 ** 自動テストについて [#k16c8728] 課題提出時に自動でコンパイルテストが行われます。すでに伝えられているように、コンパイルできなかった場合はその場で状態が「要再提出」になります。これを見落としてコンパイルできないままの状態の人が見受けられました。当然ながらコンパイルできないものは採点の対象外ですので、確認の上で再提出してください。 ** 実装のヒント [#u058d06c] 講義でも習ったことをきちんと活用すると,より良いプログラムを書くことが出来ます - インクリメント演算子 (++) ・デクリメント演算子 (--) -- x = x + 1 を x++ と書くことが出来ます - 複合代入演算子 (+=・-=) -- x = x + 3 を x += 3 と書くことが出来ます - 絶対値を求める (Math.abs) -- Math.abs をつかうと不要な条件分岐を減らせるプログラムが多くありました - contains メソッド -- 箱がクリックされたかどうかの判定などを座標の計算で頑張っている人が多くいましたが,contains メソッドを使うともっと簡潔に書けますし,バグを防げます - Boolean -- フラグとなる変数 (例: ある箱がクリックされたかどうか) に int 型を用いている人が多くいました.Boolean を使った方が意味が分かりやすくなります -- flag という Boolean の変数が true かどうかを if 文でチェックするのに if (flag == true) と書いている人がいましたが,if (flag) と書けば十分です - 意味のある変数名をつける - 変数名 -- 変数名を a, b, c, d, e... のようにつけている人がいました.プログラムを読み書きする際に意味が分かりづらく,バグの温床になります.もう少し意味のある名前をつけましょう -- 変数名やクラス名のスタイルを一貫性のあるものにすると,プログラムを読みやすくなります --- 変数名は先頭を小文字で始めるのが一般的です (例: largeBox,positionX) --- クラス名は先頭を大文字で始めるのが一般的です (例: MyWindow) - RandomIntGenerator -- RandomIntGenerator は一度作成したら何度でも nextValue メソッドを呼び出すことが出来ます -- nextValue を呼ぶたびに RandomIntGenerator を作り直している人がいましたが,無駄なのでやめましょう -- 同じ範囲 (例: 0〜100) の乱数を生成する RandomIntGenerator は一つ作れば十分です.RGB それぞれに同じ範囲の乱数を生成する RandomIntGenerator を作っている人がいましたが,無駄なのでやめましょう * 各課題について [#za0c12d8] ** 2-1 [#w23ab6e1] - ほとんどの人が正解していました。 ** 2-2 [#ua80ab0f] - Wikiに追加された[[補足・訂正:http://www.fos.kuis.kyoto-u.ac.jp/~igarashi/class/ip/index.php?Week06#pa3ff2a1]]に記載されている条件を満たしていないため再提出になっている人が多く見受けられました。提出システム上でも注意されていました。気をつけて下さい。 - ドラッグ時に毎回新しい FramedOval を作成している人がいましたが,クリック時に作成した円の位置やサイズを変える方法の方がパフォーマンスが良いです - NullPointerExceptionという例外(実行時エラーの一種)が発生して以下のようなウィンドウが表示される場合がありました。このウィンドウは2回目以降は発生しないため見逃しがちですが、ほとんどの場合はプログラムの挙動がおかしいので、提出前にプログラムの動作をよく確認するようにしてください。 CENTER:&ref(第2回演習総評/nurupo.png,50%); ** 2-3 [#tbee1040] - InvisibleColorクラスを使用することは必須です。課題文をよく読みましょう。 - ヒットした箱の種類に対応して適切な文章を表示していない場合も再提出としました。 - 得点の計算方法に関して、同じ箱を複数回クリックすると複数回得点が入る人が多く見受けられました。課題の表をよく読むと「1回のヒットごとの加点」ではないことが読み取れると思います。 - InvisibleColorクラスをInvisibleGameクラスの中にペーストしている人がいました。今回は受理しましたが、内部クラスは授業では取り扱いませんし、今後の課題においては非推奨(妥当な理由が説明されていない限り不正解)とします。 ** 2-4 [#je7bfc8b] - ゲームオーバーになる条件を間違えている人が非常に多く見受けられました。課題文をよく読みましょう。 - onMouseRelease内でcurrentTimeMillisを複数回呼び出した場合、それぞれで取得できる時間には誤差が生じます。今後は気をつけて下さい。 - 差が0秒ぴったりの場合は0除算が発生します。これに気づいて適切に対処できている人もいました。 ** 2-5 [#ra784a15] - 40文字になっていない(39文字)人がいました。substringの仕様をよく読むとわかります。これに限らず、ループの回数などで一般にありがちなタイプのミスなので常に意識することを目指しましょう。 ** 2-6 [#jde87343] - この課題に取り組んだ人はほとんど正解していました。 ** 2-7 [#q080e874] - この課題に取り組んだ人はほとんど正解していました。 ** 2-8 [#s63085e2] - 工夫したUIが多く見受けられました。 - 1〜9にしか対応していない人は部分点としました。