算術・比較・論理演算子のコードトレース

演算式は数値を計算する部分、値を比較する部分、複数の条件を結ぶ部分に分けると読みやすくなります。各段階の結果の型と値を確かめ、最後に代入や表示へ渡す値を求めます。

この単元で学ぶこと

  • 算術・比較・論理を段階に分ける
  • 優先順位と括弧から式の構造を読む
  • 式の結果の型に合う代入を判定する

本文解説

中間結果の型を書く int a=9,b=4;boolean ok=a/b==2&&a%b==1;では商2と余り1をそれぞれ比較して、true&&trueを得ます。数値段階とboolean段階を同じ欄で計算しようとせず、式の木を段階的に小さくします。

負数と剰余を組み合わせる -9/4は-2、-9%4は-1です。(-9/4)*4+(-9%4)は-9に戻ります。割り算を床関数のように-3へ丸めたり、余りを常に正にしたりすると、この一致が崩れます。

文字列へ切り替わる点 1+2+":"+3+4は"3:34"です。最初の加算は数値、その後は文字列連結です。1+2+":"+(3+4)なら"3:7"です。最初からすべて文字列として扱う誤りと、最後まで数値加算する誤りを両方避けます。

比較と等価の結び付き 3<4==5>6は(3<4)==(5>6)で、true==falseのfalseです。3<4<5はbooleanを数値比較するため不正です。記号が多いだけで一律エラーとはせず、各演算へ渡る型を一つずつ調べます。

短絡する範囲を調べる int n=0;true||(n=2)>0&&++n>0は左trueで右全体を省略します。false||(n=2)>0&&++n>0なら右を評価し、n=2の後に3へ増やします。優先順位で式を組み立ててから、短絡がどの部分を飛ばすか確認します。

例外が起きる時点 int n=0;boolean b=n!=0&&12/n>1なら除算しません。n!=0&12/n>1なら例外です。例外が起きればそのprintの引数値が得られず表示もしません。前のprintが済んでいる場合だけ既存出力が残るため、出題コードに省略がないか確認します。

丸めと桁あふれ intの上限に1を足すと最小値へ折り返し、正数に正数を加えたのに負になることがあります。longへ代入した後に広くなるだけでは防げません。小数の丸めと整数の桁あふれは原因が違うので、どちらの型の演算かを先に判断します。

解いた結果を検証する 答えを出したら、正しいmain内で同じコードを実行し、出力を照合できます。コンパイルエラーを予想した場合は実行前の型検査、実行時例外を予想した場合は評価経路と対象演算を区別します。単に結果を暗記せず、なぜ別の選択肢にならないかを説明します。

図解

料金の条件を段階に分ける
段階ごとに数値からbooleanへ型が変わる。

重要ポイント

  • 算術は数値、比較はboolean、論理はbooleanを組み合わせる。
  • 式の結果を代入先の型へ格納できるか確認する。
  • 一般に乗除→加減→比較→等価→&&→||の順に強く結び付く。
  • 括弧は結び付きを明示する。

間違えやすい点

  • 比較結果をintへ代入しない。
  • 文字列連結へ切り替わる+を見落とさない。
  • 優先順位表だけで副作用の評価順を決めない。

用語解説

式
値を計算する構文。変数、演算、メソッド呼出し等を組み合わせる。
結果の型
その式が生成する値の型。
優先順位
複数の演算子の結び付き方を決める規則。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。