いま時間を見つけては、Java の練習をしています。今日行なったのは、10人分の得点をキーボードから入力し、偏差値を計算し、得点順に並べ替えるというプログラムです。ついでに、平均点と合格率を求め、平均点との境目に区切り線を引きます。
プログラミングの途中でエラーが出たら、これを修正していく作業を「デバッグ」といいます。プログラミングにおいてこのデバッグ作業は、非常に大事な工程です。そして一番大変でもあり、最もエキサイティングな作業です。なんと言っても、動かなかった原因を突き止め改善することによって、プログラムが正常に動くのを見るのは、これほど面白いことはなかなか無いです。言わば、「プログラムに命を吹き込む」と表現しても、大げさではないと思います。
では、デバッグのあらましを見てみましょう。次の画像を見てください。「①コンパイル・エラーの内容」と示された部分が、コンパイルをしようとした時に起きたエラーです。コンパイルとは、人間が理解しやすい記述ルール(言語ともいいます。今回の例では Java です)から、コンピューターが処理しやすい記述ルールへと翻訳することをいいます。画像の例では 「javac +ファイル名」というコマンドでコンパイルを実行しています。
ではエラーの内容を見てみましょう。if 文は条件分岐したい時に用い、 if (条件式) {処 理} と書きます。if 文は、条件式が成り立つ(= true)であれば、{ }内の処理を実行し、成り立たなければ{ }内は実行せず次の処理に移ります。ここで条件式を使っている理由は、点数が平均値を下回った時に区切り線を引くための処理です。strline という変数は文字列型で中には"――――――"(区切り線)が代入されています。それでは条件式を分解して1つ1つ見ていきましょう。
tensu[i] < calcHeikin(tensu) …この部分は、点数が10人分代入された配列 tensu[i] の値が平均値より小さい時に、true となります。calcHeikin(tensu)は平均値を求めるメソッドを呼び出しています。メソッドとはある決まった処理を行なえるように、別に自分で組んだプログラムの固まりです。サブルーチンと言えばお分かりでしょうか。
flag=0 …次にこの部分は、フラグ(旗)が立っていない(= 0)ならば、ということです。このフラグは点数が平均値を下回った時はじめてオン(= 1)になります。つまり、最初に点数が平均値を下回ったタイミングを知るためのフラグなのです。このフラグを使わないと、平均値以下の点数すべてに区切り線が引かれてしまうことになり不都合です。
A && B … &&は論理積の意味で、AかつBが成り立つ時ということです。(AとBは分かりやすいよう、便宜上付しています) これは、「A=true かつ B=true 」としても同じことです。つまりここでは、上で説明した二つ、すなわち、tensu[i] < calcHeikin(tensu) と、flag=0 の二条件が両方 true の時だけ、条件分岐の処理が実行されることになります。
それで、やっとエラーの原因についてですが、flag = = 0 と等号(イコール)を2つ付けなかったことが原因だったのです。なぜかというと、flag=0 としてしまうと、これはあくまで flag という変数に整数 0 を代入すると解釈され、flag=0 は true ではなく int (整数)として認識されるのです。ですから「 = = 」と2つ並べることによって論理値として扱われるので、やっと flag = = 0 は true として認識されます。このことが、1枚目の画像で最初の型:boolean(論理値)であるのに対して2番目の型:int(整数)と警告されているのです。正しくは、&& の両辺はどちらも論理値でなくてはならないのです。ちなみに1枚目の画像では、 ( )&&( ) と書いてしまいましたが、2つのかっこは必要ありません。では続いて2つめのエラーを見てみましょう。
もうだいぶ長文になりましたので端折ります。③実行時のエラー内容の画像では配列のエラーが出ています。エラー文の1行目末尾に 10 の数字があることから、本来存在しないはずの配列 tensu[10]にアクセスしてしまい、エラーとなったのです。実際に宣言したのは tensu[0] ~ tensu[9] までですから、「④ここでは等号は必要ない」の画像に示した j <= i - 1 のうちの等号(=)を取り去れば、tensu[10]を呼び出してしまうことはありません。次の画像は、以上のデバッグの結果、正常に出力された結果です。(後で、名前も入力し点数等と一緒に並べ替えるように変更しました。ソースコードにはその部分は割愛しています)
だいぶ込み入った内容となりましたが、いかがでしたでしょうか。最後まで読んで頂きありがとうございました。
↓クリック宜しくお願いします。
にほんブログ村