問題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型に型変換(キャスト)してあげる必要があります。
参考図書
独学で挫折しそうになったら、オンラインプログラミングスクール