演習: 式と演算子
各問題のコードは、Main クラスの main メソッドの中に書く前提です。
3-A. 走行距離の計算
Section titled “3-A. 走行距離の計算”時速と走行時間から、走行距離を計算して出力してください。
double speed = 60.0; // km/hdouble hours = 2.5;出力例:
走行距離: 150.0kmヒント
距離 = 速度 × 時間です。double * double の結果は double になります。
3-B. BMI の計算
Section titled “3-B. BMI の計算”身長と体重から BMI(Body Mass Index)を計算して出力してください。BMI は 体重(kg) ÷ 身長(m)² で求められます。
double heightM = 1.70;double weightKg = 65.0;出力例:
BMI: 22.49134948096886ヒント
身長を2回掛けるか、Math.pow(heightM, 2) を使います。
3-C. ピザ代の山分け
Section titled “3-C. ピザ代の山分け”合計金額を人数で割り、一人あたりの金額と余り(端数)を出力してください。
int total = 3500;int people = 3;出力例:
一人あたり: 1166円余り: 2円ヒント
整数同士の / は商の整数部分を返します(小数点以下は切り捨て)。% で余りが求められます。
3-D. 摂氏華氏変換
Section titled “3-D. 摂氏華氏変換”摂氏温度を華氏温度に変換して出力してください。変換式は 華氏 = 摂氏 × 9 ÷ 5 + 32 です。
int celsius = 25;出力例:
華氏: 77.0度ヒント
出力を 77.0 のような小数表示にするには、計算式のどこかで double を使う必要があります。9.0 / 5 のように書くか、(double) で celsius をキャストすると、結果が double になります。
なお、celsius * (9 / 5) のように 9 / 5 を先に評価する書き方では、整数除算で 1 になり結果が大きくずれます(25 * 1 + 32 = 57)。
3-E. 文字列の比較(== と equals)
Section titled “3-E. 文字列の比較(== と equals)”以下のコードについて、s1 と s2 を == と equals の2通りで比較し、それぞれの結果を出力してください。
String s1 = "hello";String s2 = new String("hello");出力例:
== による比較: falseequals による比較: trueヒント
== は 参照(メモリ上の同じオブジェクトか) を比較します。equals は 値(中身が等しいか) を比較します。new String("hello") は新しいオブジェクトを作るので、リテラル "hello" とはメモリ上の別の場所にあります。
文字列の比較には equals を使ってください。
なお、実務で new String("...") と書くことはまずありません(無駄なオブジェクトを作るだけ)。本問では == と equals の挙動の違いを観察するために、あえて参照が異なる状況を作っています。
3-F. パスワード照合
Section titled “3-F. パスワード照合”入力されたパスワードが正しいかを判定し、結果を boolean で出力してください。大文字・小文字は区別しません。
String correctPassword = "Java2025";String input = "JAVA2025";出力例:
認証: trueヒント
大文字・小文字を区別しない比較には equalsIgnoreCase メソッドが使えます。
3-G. 残高計算(複合代入演算子)
Section titled “3-G. 残高計算(複合代入演算子)”口座の残高に対して入金・出金を行い、最終的な残高を出力してください。複合代入演算子(+=、-=)を使ってください。
int balance = 10000;int deposit = 5000;int withdraw = 3000;出力例:
残高: 12000円ヒント
balance += deposit は balance = balance + deposit と同じ意味です。同様に -= は減算の代入です。
3-H. printf で整形出力
Section titled “3-H. printf で整形出力”商品名と価格を表形式で整形して出力してください。価格は3桁ごとのカンマ区切り、品名は左揃え、価格は右揃えで桁を揃えます。
String item1 = "ノート";int price1 = 250;String item2 = "鉛筆セット";int price2 = 1200;String item3 = "万年筆";int price3 = 15800;出力例:
ノート 250円鉛筆セット 1,200円万年筆 15,800円ヒント
System.out.printf を使います。
%-12sで左揃え12文字の文字列%,7dでカンマ区切り、右揃え7文字の整数- 改行は
%n
例: System.out.printf("%-12s%,7d円%n", item1, price1);
なお、日本語文字の表示幅はターミナルによって異なるため、出力例と完全には揃わないことがあります。
3-I. 入場可能か判定(論理演算子)
Section titled “3-I. 入場可能か判定(論理演算子)”年齢が18歳以上65歳未満で、かつ会員である場合に入場可、それ以外は入場不可とします。条件分岐は使わず、論理演算子の結果を boolean 変数に入れて出力してください。
int age = 30;boolean isMember = true;出力例:
入場可: trueヒント
&& は両方が true のとき true です。条件は3つあるので && で連結します。
3-J. 浮動小数点の精度
Section titled “3-J. 浮動小数点の精度”以下の計算結果を出力し、0.3 と等しいかを == と「絶対値が誤差範囲内かどうか」の2通りで判定してください。
double result = 0.1 + 0.2;出力例:
result: 0.30000000000000004result == 0.3: false誤差範囲内: trueヒント
浮動小数点数は内部的に2進数で扱われるため、0.1 や 0.2 を正確に表現できません。そのため 0.1 + 0.2 は 0.3 と完全には一致しません。
double の比較は、誤差を許容する判定をします。
Math.abs(result - 0.3) < 1e-91e-9 は 0.000000001 の意味で、許容できる誤差を表します。