Skip to main content

演算子

この章で得られるスキル:

  • ✅ 計算や比較を使ったプログラムが書ける
  • ✅ 複雑な条件式を組み立てられる
  • ✅ 実務でよく使う演算子のパターンを理解できる
  • ✅ エラーが起きやすいポイントを避けられる

Step 0: まず体験してみよう

説明の前に、まず 演算子がないと何が困るのか を体験しよう。

シナリオ:ECサイトの送料計算を作りたい

あなたはECサイトを作っている。以下のルールで送料を計算したい:

  • 合計金額が3000円以上なら送料無料
  • 3000円未満なら送料500円

実行してみよう(演算子なし):

public class Main { public static void main(String[] args) { int totalPrice = 2500; int shippingFee = 500; // 演算子がないと... // 「3000円以上かどうか」を判定できない // 合計金額を計算できない // 条件による分岐ができない System.out.println("商品合計: " + totalPrice + "円"); System.out.println("送料: " + shippingFee + "円"); // これでは、どんな金額でも一律500円になってしまう } }

問題点:

  • 値の比較ができない(「3000円以上」という判定ができない)
  • 計算ができない(合計金額が計算できない)
  • 条件による処理の切り替えができない

では、演算子を使うとどうなるか?

public class Main { public static void main(String[] args) { int totalPrice = 2500; int shippingFee; // 演算子を使えば、条件で送料を切り替えられる if (totalPrice >= 3000) { // 比較演算子 shippingFee = 0; // 送料無料 } else { shippingFee = 500; } int finalPrice = totalPrice + shippingFee; // 算術演算子 System.out.println("商品合計: " + totalPrice + "円"); System.out.println("送料: " + shippingFee + "円"); System.out.println("お支払い額: " + finalPrice + "円"); } }

解決できたこと:

  • ✅ 値を比較できる(>=
  • ✅ 計算ができる(+
  • ✅ 条件による処理の切り替えができる

Step 1: 算術演算子を理解する

算術演算子 は、計算を行うための演算子 である。

基本の5つ

演算子意味結果
+足し算5 + 38
-引き算5 - 32
*掛け算5 * 315
/割り算6 / 32
%余り(剰余)10 % 31
public class Main { public static void main(String[] args) { int a = 10; int b = 3; System.out.println("a + b = " + (a + b)); System.out.println("a - b = " + (a - b)); System.out.println("a * b = " + (a * b)); System.out.println("a / b = " + (a / b)); System.out.println("a % b = " + (a % b)); } }

やってみよう:

  • abの値を変えて実行してみよう

Step 2: 剰余演算子(%)の実用例

剰余演算子 % は、割り算の余り を求める。

実用例1:偶数・奇数の判定

public class Main { public static void main(String[] args) { int number = 7; if (number % 2 == 0) { System.out.println(number + " は偶数です"); } else { System.out.println(number + " は奇数です"); } } }

やってみよう:

  • numberを変えて、偶数・奇数判定を試してみよう

実用例2:N回に1回の処理

public class Main { public static void main(String[] args) { // 10回ループして、3回に1回だけ「ボーナス!」と表示 for (int i = 1; i <= 10; i++) { System.out.print(i + "回目: "); if (i % 3 == 0) { System.out.println("ボーナス!"); } else { System.out.println("通常"); } } } }

やってみよう:

  • i % 3i % 5に変えて、5回に1回にしてみよう

Step 3: 整数の割り算に注意する

重要:整数同士の割り算は、結果も整数になる(小数点以下は切り捨て)

public class Main { public static void main(String[] args) { // ❌ 整数同士の割り算(注意!) int result1 = 7 / 2; System.out.println("7 / 2 = " + result1); // 3(3.5ではない!) int result2 = 10 / 3; System.out.println("10 / 3 = " + result2); // 3(3.333...ではない!) System.out.println("---"); // ✅ 小数を含む結果を得る方法 double result3 = 7.0 / 2.0; System.out.println("7.0 / 2.0 = " + result3); // 3.5 // どちらか一方がdoubleでもOK double result4 = 7.0 / 2; System.out.println("7.0 / 2 = " + result4); // 3.5 System.out.println("---"); // 実用例:平均点の計算 int score1 = 80; int score2 = 90; int score3 = 75; // ❌ 間違った方法(整数の割り算) int averageWrong = (score1 + score2 + score3) / 3; System.out.println("平均点(間違い): " + averageWrong); // 81 // ✅ 正しい方法(doubleで計算) double averageCorrect = (score1 + score2 + score3) / 3.0; System.out.println("平均点(正しい): " + averageCorrect); // 81.666... } }

やってみよう:

  • 5 / 25.0 / 2の結果の違いを確認しよう
注意

平均点や割合を計算するときは、必ずdoubleで計算しよう。 整数の割り算だと、小数点以下が切り捨てられてしまう。


Step 4: 複合代入演算子を理解する

複合代入演算子 は、計算と代入を同時に行う 便利な演算子である。

基本の5つ

演算子意味同じ意味
+=加算して代入x += 5x = x + 5
-=減算して代入x -= 5x = x - 5
*=乗算して代入x *= 5x = x * 5
/=除算して代入x /= 5x = x / 5
%=剰余して代入x %= 5x = x % 5
public class Main { public static void main(String[] args) { int score = 100; System.out.println("初期スコア: " + score); // 複合代入演算子を使う score += 50; // score = score + 50 と同じ System.out.println("50点追加: " + score); score -= 20; // score = score - 20 と同じ System.out.println("20点減点: " + score); score *= 2; // score = score * 2 と同じ System.out.println("2倍ボーナス: " + score); score /= 5; // score = score / 5 と同じ System.out.println("5で割る: " + score); score %= 10; // score = score % 10 と同じ System.out.println("10で割った余り: " + score); } }

やってみよう:

  • 初期スコアを変えて実行してみよう
ポイント

複合代入演算子は、コードを 短く読みやすく する。 実務でよく使われるので、覚えておこう。


Step 5: 比較演算子を理解する

比較演算子 は、2つの値を比較して、true/falseを返す 演算子である。

基本の6つ

演算子意味結果
==等しい5 == 5true
!=異なる5 != 3true
<より小さい3 < 5true
>より大きい5 > 3true
<=以下5 <= 5true
>=以上5 >= 3true
public class Main { public static void main(String[] args) { int x = 10; int y = 20; System.out.println("x == y: " + (x == y)); // false System.out.println("x != y: " + (x != y)); // true System.out.println("x < y: " + (x < y)); // true System.out.println("x > y: " + (x > y)); // false System.out.println("x <= 10: " + (x <= 10)); // true System.out.println("y >= 20: " + (y >= 20)); // true System.out.println("---"); // 実用例:年齢判定 int age = 18; if (age >= 18) { System.out.println("成人です"); } else { System.out.println("未成年です"); } } }

やってみよう:

  • xyの値を変えて、比較結果の変化を確認しよう
注意
  • 等しいかどうかは == (イコール2つ)
  • = は代入、== は比較

間違えやすいので注意!


Step 6: 論理演算子を理解する

論理演算子 は、複数の条件を組み合わせる ための演算子である。

基本の3つ

演算子意味結果
&&AND(かつ)true && truetrue
||OR(または)true || falsetrue
!NOT(否定)!truefalse

AND演算子(&&)

両方の条件が真のとき、結果が真になる

public class Main { public static void main(String[] args) { // 運転できるかの判定 int age = 25; boolean hasLicense = true; if (age >= 18 && hasLicense) { System.out.println("✅ 運転できます"); } else { System.out.println("❌ 運転できません"); } System.out.println("---"); // クーポン使用可能の判定 int totalPrice = 5000; boolean isMember = true; if (totalPrice >= 3000 && isMember) { System.out.println("✅ クーポンが使えます!"); } else { System.out.println("❌ クーポンは使えません"); } } }

やってみよう:

  • hasLicensefalseに変えてみよう

OR演算子(||)

どちらか一方でも真のとき、結果が真になる

public class Main { public static void main(String[] args) { // 週末判定 int dayOfWeek = 0; // 0:日曜, 6:土曜 if (dayOfWeek == 0 || dayOfWeek == 6) { System.out.println("✅ 週末です!"); } else { System.out.println("平日です"); } System.out.println("---"); // 割引対象判定 int age = 15; boolean isStudent = false; if (age < 18 || isStudent) { System.out.println("✅ 学割が適用されます"); } else { System.out.println("通常料金です"); } } }

やってみよう:

  • dayOfWeek3(水曜)に変えてみよう

NOT演算子(!)

条件を反転させる(真→偽、偽→真)

public class Main { public static void main(String[] args) { boolean isRaining = false; if (!isRaining) { System.out.println("☀️ 傘は不要です"); } else { System.out.println("☔ 傘が必要です"); } System.out.println("---"); // ログイン判定 boolean isLoggedIn = false; if (!isLoggedIn) { System.out.println("ログインしてください"); } else { System.out.println("ようこそ!"); } } }

やってみよう:

  • isRainingtrueに変えてみよう

Step 7: インクリメント・デクリメント

インクリメント(++)

変数の値を1増やす

int count = 5;
count++; // count = count + 1 と同じ
// countは6になる

デクリメント(--)

変数の値を1減らす

int count = 5;
count--; // count = count - 1 と同じ
// countは4になる
public class Main { public static void main(String[] args) { int lives = 3; System.out.println("初期ライフ: " + lives); lives--; // ミスした System.out.println("1回ミス: " + lives); lives--; // また ミスした System.out.println("2回ミス: " + lives); lives--; // もう一度ミス System.out.println("3回ミス: " + lives); if (lives == 0) { System.out.println("ゲームオーバー"); } System.out.println("---"); // カウントアップの例 int score = 0; System.out.println("初期スコア: " + score); score++; // ポイント獲得 System.out.println("1回目: " + score); score++; // ポイント獲得 System.out.println("2回目: " + score); score++; // ポイント獲得 System.out.println("3回目: " + score); } }

やってみよう:

  • ライフが0になる様子を確認してみよう

Step 8: 実践課題

これまで学んだことを組み合わせて、実践的なプログラムを作ってみよう。

課題1:ゲームのHPとMP計算

仕様:

  • HPが攻撃でダメージを受ける
  • MPが魔法で消費される
  • HPが0以下なら「戦闘不能」と表示
public class Main { public static void main(String[] args) { // 初期ステータス int hp = 100; int mp = 50; final int MAX_HP = 100; final int MAX_MP = 50; System.out.println("【初期ステータス】"); System.out.println("HP: " + hp + " / " + MAX_HP); System.out.println("MP: " + mp + " / " + MAX_MP); System.out.println(); // 戦闘開始 System.out.println("【戦闘開始】"); // 敵の攻撃を受ける int damage = 30; hp -= damage; System.out.println("敵の攻撃! " + damage + "ダメージ受けた"); System.out.println("HP: " + hp + " / " + MAX_HP); System.out.println(); // 魔法を使う int mpCost = 20; if (mp >= mpCost) { mp -= mpCost; System.out.println("ファイアを唱えた! MP-" + mpCost); System.out.println("MP: " + mp + " / " + MAX_MP); } else { System.out.println("MPが足りない!"); } System.out.println(); // また攻撃を受ける damage = 80; hp -= damage; System.out.println("敵の強攻撃! " + damage + "ダメージ受けた"); System.out.println("HP: " + hp + " / " + MAX_HP); System.out.println(); // 戦闘不能判定 if (hp <= 0) { System.out.println("💀 戦闘不能!"); } else { System.out.println("まだ戦える!"); } } }

やってみよう:

  • ダメージ量を変えてみよう
  • ポーション(HP回復)の処理を追加してみよう(hp += 30

課題2:割引計算プログラム

仕様:

  • 会員なら10%オフ
  • 5000円以上なら送料無料
  • 最終的な支払い金額を計算
public class Main { public static void main(String[] args) { // 購入情報 int basePrice = 6000; boolean isMember = true; final int SHIPPING_FEE = 500; final int FREE_SHIPPING_THRESHOLD = 5000; System.out.println("【お会計】"); System.out.println("商品合計: " + basePrice + "円"); // 会員割引 int discountedPrice = basePrice; if (isMember) { discountedPrice = (int) (basePrice * 0.9); int discount = basePrice - discountedPrice; System.out.println("会員割引: -" + discount + "円"); } // 送料計算 int shippingFee = 0; if (discountedPrice >= FREE_SHIPPING_THRESHOLD) { System.out.println("送料: 無料"); } else { shippingFee = SHIPPING_FEE; System.out.println("送料: " + shippingFee + "円"); } // 最終金額 int finalPrice = discountedPrice + shippingFee; System.out.println("---"); System.out.println("お支払い額: " + finalPrice + "円"); } }

やってみよう:

  • isMemberfalseにして、非会員の場合を試してみよう
  • basePrice3000にして、送料が発生する場合を試してみよう

課題3:成績判定プログラム

仕様:

  • 80点以上:A
  • 60点以上:B
  • 40点以上:C
  • 40点未満:D
  • 平均点も計算
public class Main { public static void main(String[] args) { // テスト結果 int mathScore = 85; int englishScore = 72; int scienceScore = 68; System.out.println("【テスト結果】"); System.out.println("数学: " + mathScore + "点"); System.out.println("英語: " + englishScore + "点"); System.out.println("理科: " + scienceScore + "点"); System.out.println(); // 平均点計算 double average = (mathScore + englishScore + scienceScore) / 3.0; System.out.println("平均点: " + average + "点"); System.out.println(); // 各科目の成績判定 System.out.println("【成績】"); System.out.print("数学: "); if (mathScore >= 80) { System.out.println("A"); } else if (mathScore >= 60) { System.out.println("B"); } else if (mathScore >= 40) { System.out.println("C"); } else { System.out.println("D"); } System.out.print("英語: "); if (englishScore >= 80) { System.out.println("A"); } else if (englishScore >= 60) { System.out.println("B"); } else if (englishScore >= 40) { System.out.println("C"); } else { System.out.println("D"); } System.out.print("理科: "); if (scienceScore >= 80) { System.out.println("A"); } else if (scienceScore >= 60) { System.out.println("B"); } else if (scienceScore >= 40) { System.out.println("C"); } else { System.out.println("D"); } System.out.println(); // 総合判定 if (average >= 80) { System.out.println("🎉 優秀です!"); } else if (average >= 60) { System.out.println("👍 良好です"); } else { System.out.println("📝 もう少し頑張りましょう"); } } }

やってみよう:

  • 点数を変えて、成績判定を試してみよう
  • 4科目以上に拡張してみよう

まとめ

この章では、Javaの 演算子 について学んだ。

🎯 達成できたこと

  • ✅ 計算や比較を使ったプログラムが書けるようになった
  • ✅ 複雑な条件式を組み立てられるようになった
  • ✅ 実務でよく使う演算子のパターンを理解できた
  • ✅ エラーが起きやすいポイントを避けられるようになった

📚 学んだ内容

演算子種類
+, -, *, /, %算術演算子a + b
+=, -=, *=, /=, %=複合代入演算子x += 5
==, !=, <, >, <=, >=比較演算子a > b
&&, `, !`
++, --インクリメント・デクリメントcount++

🚀 次のステップ

次の章では、条件分岐(if文、switch文)について学ぶ。 演算子で得た真偽値を使って、プログラムの処理を分岐させる方法を学ぶ。


💡 よくある質問

Q1: ===の違いは?

A: =は代入、==は比較。

int x = 10;      // ✅ 代入(xに10を代入)
if (x == 10) { // ✅ 比較(xが10と等しいか)

よくあるミス:

if (x = 10) {    // ❌ エラー!代入はできない

Q2: 整数の割り算で小数が欲しいときは?

A: どちらか一方をdoubleにする。

int result1 = 7 / 2;      // 3(整数の割り算)
double result2 = 7.0 / 2; // 3.5(小数の割り算)
double result3 = 7 / 2.0; // 3.5(こちらもOK)

Q3: &&||の違いは?

A: &&は「両方true」、||は「どちらか一方がtrue」

// &&(AND):両方trueのときだけtrue
if (age >= 18 && hasLicense) { // 18歳以上 かつ 免許あり
// ||(OR):どちらか一方がtrueならtrue
if (day == 0 || day == 6) { // 日曜 または 土曜

Q4: ++ii++の違いは?

A: 単独で使う分には同じ。違いが出るのは、他の式と組み合わせたとき。

int i = 5;
i++; // iを1増やす(6になる)
++i; // iを1増やす(6になる) → 単独なら同じ

違いが出る例:

int x = 5;
int y = x++; // yには5が入り、その後xが6になる

int a = 5;
int b = ++a; // aが6になり、その後bに6が入る

実務では、単独で使うことがほとんどなので、どちらでもOK。

Q5: +=などの複合代入演算子はいつ使う?

A: 頻繁に使う。実務でよく出てくるパターン。

// スコア加算
score += 10; // score = score + 10 より短い

// HP減少
hp -= damage; // hp = hp - damage より読みやすい

// カウントアップ
count++; // count += 1 や count = count + 1 と同じ

短くて読みやすいので、積極的に使おう!