Thinkers'Studio
JavaとC言語の自習ツール
空文を見逃さないようにしよう(Java版)

式にセミコロン ; をつけたものが文です

セミコロンだけで式の無い文が"空文"です

 空文を、「何もしない」処理として書くことができます。
 たとえば次は、for の初期化式や条件式を空文にし、無限ループにした書き方です。
    for( ;; ) {
        /* 実行したい処理     */
        /* 繰り返しの終了判定 */
    }
 では、これを踏まえてクイズに行きましょう。

(今回のクイズです)
 次のプログラムを見てください。
class GoodScore {
    public static void main( String[] args ) {
        int[] sorted = { 92, 87, 80, 78, 45, 32 };
        int i;

        System.out.println( "80点以上を表示します" );
        for( i = 0; i < sorted.length && sorted[i] >= 80; i++ );
            System.out.println( sorted[i] + "点" );
    }
}
 降順にソートされた点数の配列 sorted で、80点以上の点数をプリントしようとしています。
 しかし、実行結果は次のようになります。
80点以上を表示します
78点
 なぜでしょうか?
  (答えは、次回の Java の Tips で ・・・)
前回のクイズの答え:  x = 0, y = 0 が表示される。  (前回の問題を見る
次の下線のように結合して加算の結果が y に代入され、それが x にも代入されます。
  x = y = -a + b * 4 / 2;

なお、「項」の評価順と 「演算子」の評価順とは異なるものです。 各項の評価順序は決まっていません。
 例) 「b * 4 / 2」について見てみると
  (演算子の評価順) 演算子 * と / は優先度が同じで左結合なので先に * が評価されます。
  (項の評価順) 演算子 * の項は b と 4 ですが、どちらが先に評価されるかは分かりません。
この例では項の評価順は関係ありませんが、問題になるケースもあります。
たとえば、b( ) * c( ) のように項が関数呼び出しの場合、b( ) が先に実行されるとは限らないので、その前提で書くと問題があります。