未来エンジニア養成所Blog

月単価180万以上のプログラミング講師がプログラミングを皆に楽しんでもらうための情報をお届けします。

【Java】基本構文に関する問題1-2

title


問題1-2

コメントで指示された値を出力するようにSystem.out.println()の丸括弧の中に、演算を書いてみましょう。

下記、【実行結果】と同じ内容が出力されるようにしてください。

(例)
// 1 足す 2 引く 3 は?
System.out.println(1 + 2 - 3);


【実行結果】

144
7
6
0.6
a


【CalculatePractice.java】

public class CalculatePractice {
    public static void main(String[] args) {

        // 5 と 6 と 7 を足した合計に 8 を掛けた値は?
        System.out.println(    );

        // 7 と 8 を足した値を 5 で割った値に、
        // 6 から 4 を引いた値に 2 を掛けた値を足した値は?
        System.out.println(    );

        // 1000 を 7 で割ったあまりは?
        System.out.println(    );

        // 6 を 5 で割った値を、さらに 2 で割った正確な値は?
        System.out.println(    );

        // アルファベットの大文字 'A' に 32 を足した文字は?
        System.out.println(    );

    }
}


解答例

【CalculatePractice.java】

public class CalculatePractice {
    public static void main(String[] args) {

        // 5 と 6 と 7 を足した合計に 8 を掛けた値は?
        System.out.println( (5 + 6 + 7) * 8 );      // 144

        // 7 と 8 を足した値を 5 で割った値に、
        // 6 から 4 を引いた値に 2 を掛けた値を足した値は?
        System.out.println( ((7 + 8) / 5) + ((6 - 4) * 2));       // 7

        // 1000 を 7 で割ったあまりは?
        System.out.println( 1000 % 7);        // 6

        // 6 を 5 で割った値を、さらに 2 で割った正確な値は?
        System.out.println( (6.0 / 5) / 2);      // 0.6
        System.out.println( ((double)6 / 5) / 2);       // 0.6
        System.out.println( (6D / 5) / 2);       // 0.6

        // アルファベットの大文字 'A' に 32 を足した文字は?
        System.out.println( (char)('A' + 32));       // a

    }
}


解説

Javaはオブジェクト指向の代表のように言われますが、正確には「99.9999%オブジェクト指向言語」と言ったところでしょう。

なぜなら、8種類の基本データ型はオブジェクトではないからです。

今回の問題は、その基本データ型に関する問題になっています。


1つ目は演算子の優先順位に関する問題です。

四則演算子の優先順位は、算数や数学の優先順位と同じです。

そのため

System.out.println(5 + 6 + 7 * 8);

としてしまうと、「67」という結果になってしまいます。

つまり、足し算より先に掛け算が行われているのです。


このような場合は、丸括弧で演算処理を囲うことで、優先順位を変更することが可能です。


ちなみに、演算子の優先順位を細かく適用するより、できるだけ括弧を使って明示的に記述するほうが良いです。

例えば、

int z = x * 2 + y / 3;

という演算があるとしましょう。


その時には

int z = (x * 2) / (y / 3);

と記述したほうが、読み手に意味が伝わりやすくて親切です。


演算が複雑になればなるほど優先順位を間違えやすいので、このような「明示的なプログラミング」を心がけましょう。



2問目は丸括弧をネストして考える演算です。



3問目は余りを求める問題です。

剰余演算子を知っているかどうかになります。


Javaでは「%」を使用して剰余演算を行うことができます。



4問目はちょっと厄介だったかもしれません。

次のように単純に演算をしてしまうと、結果が「0」になってしまいます。

System.out.println(6 / 5 / 2);


「6」も「5」も「2」もすべて整数リテラルなので、int型扱いになります。


しかし、今回結果として求めたいのは「0.6」という浮動小数点数double型です。


「6 / 5」の演算結果は「1」なので、この時点で「情報の欠落」が発生します。

int型とint型の演算結果はint型にしかならないからです。


しかし、int型とdouble型の演算結果は、大きいデータ型の方にそろえられてdouble型となり、「情報の欠落」は発生しません。



5問目は「char型も数値で管理されている」という点です。


Javaで「文字」はシングルクォートで囲った一文字であり、ダブルクォートで囲った「文字列」とは異なります。

「文字」を表現するchar型は、0 〜 65535 までの数値でしかないのです。


回答として

System.out.println('A' + 32);

とした人もいたでしょう。


char型とint型ではint型の方が大きいため、char型の「A」とint型の「32」で演算すると、結果はint型になるのです。


問題では「文字として」出力してほしいとなっていますので、char型に型変換(キャスト)してあげる必要があります。


参考図書



独学で挫折しそうになったら、オンラインプログラミングスクール
未来エンジニア養成所Logo