プログラミング入門(2015年度夏学期)? 4-1 †よくできていました 4-2 †せっかくCircleとSquareをResizableインターフェースを実装して定義したの で,これらを使う側では (Resizableの機能で足るならば) それぞれの型を直 接指定する必要はありません.すなわち Circle c = new Circle(); ではなく Resizable c = new Circle(); としてよいのです.(どう嬉しいのか…CircleかSquareのどちらかを扱いたいと きを考えてみてください.まあ今回の問題ではそんなに嬉しくないかもしれま せんが.) 4-3 †終端としてのBaseParsleyを定義している人といない人で分かれました.この 辺の利点は講義資料や教科書にも書いてあると思いますが,終端を表すクラス を定義してやって,nullチェックを極力避けるのが,NullPointerExceptionを 避けるためにも良いプログラムです.実際,(任意で)containsメソッドを実装 しているものの,nullチェックを怠ってヌルポを吐いてる人がいます. また,Parsleyコンストラクタを再帰的に定義しているのに,branchの数を static変数に代入して計算している人が目立ちました.(以下のように) private static int branches = 0; public Parsley{ // branchesの計算 } int getBranches(){ return branches; } こういったコードには色々と問題があると思いますので,考えてみてください. (例えばParsleyクラスのインスタンスを2つ作っても,static変数は共通です.) そもそも再帰構造なので,再帰的に計算するのが常套でしょう. Parsley left,center,right; int getBranches(){ return 1 + left.getBranches() + center.getBranches() + right.getBranches(); } 4-4 †4-3と同様に length を static 変数として定義して計算している例が見られました. 4-5,6 †よくできていました 4-7 †色々工夫を凝らしていた人も多く,面白かったです. ただ,NullPointerExceptionなどのエラーが出ているのをそのままにしているプログラムも多く見受けられました.(敵に弾が当たるとエラー,など…) 実行時のエラーは,「ターミナルウィンドウ」を表示すれば見ることができますし,ソースコード上での発生箇所も概ね分かります. 今後はこのようなバグにも注意しましょう. その他 †公開する必要のないインスタンス変数は,privateとして定義しておきましょう. 例えば,Parsleyの中の子Parsleyをpublicにする必要はあるでしょうか? |