C
Java/基礎/Lesson 03

Java 変数・データ型・制御構文 — 本当の出発点

45分·theory

Java 変数・データ型・制御構文 — 本当の出発点

🎯 このレッスンを読み終えたら

このレッスンをすべて読み終えると、次の3つを自信を持ってできるようになります。

  • ✅ 8つの基本データ型のうち 実務でよく使う4つ (int/double/boolean/char) の違い
  • ✅ for-each・for・while・switch を いつ・どれ を使うか
  • ✅ 整数除算の落とし穴 + 型キャストと (int) double の truncate 動作の説明

学習目標を チェックリスト として使い、すべて答えられるようになったらレッスンを閉じてください。

8つの基本データ型 — 全部暗記しなくて大丈夫

Java には 2種類の分類 があります

  • 基本型 (primitive) — 実際の 値を保持する 型。8種類。
  • 参照型 (reference) — オブジェクトの アドレスを保持する 型。String、配列、クラスなど。

基本型は4つだけ覚えれば 大丈夫です: intdoublebooleanchar

基本型8種類 — 1枚の表で

サイズ範囲使い時
byte1バイト-128 ~ 127ほぼ使わない。バイナリ処理のみ。
short2バイト±32Kほぼ使わない。
int4バイト±21億整数のデフォルト。ほぼこれ。
long8バイト±9.2×10^18int の範囲を超える大きな数 (例: タイムスタンプ)。
float4バイト小数 7桁精度不足。ほぼ使わない。
double8バイト小数 15桁小数のデフォルト
boolean1ビットtrue/false真/偽。
char2バイト1文字1文字 ('A')。

結論: 最初は intdoublebooleanchar だけ知っていれば十分です。

宣言と代入

java
int age = 30;
double height = 175.5;
boolean isStudent = true;
char grade = 'A';
String name = "イム・ドンクン";   // String は参照型ですがよく使います

= は「等しい」ではなく「代入する」 という意味。右辺の値を左辺の変数に 代入 します。

出力 — println vs printf

java
System.out.println("名前: " + name);          // 改行を含む
System.out.print("1行に ");                 // 改行なし
System.out.printf("年齢: %d歳, 身長: %.1fcm%n", age, height);  // Cスタイルフォーマット

%d = 整数、%f = 小数、%s = 文字列、%n = 改行。オプション %.1f小数点1桁

型キャスト — int と double 間の変換

暗黙の変換 (自動)

小さい型 → 大きい型 は自動的に変換されます。

java
int a = 10;
double b = a;    // 10 → 10.0 自動変換
System.out.println(b);  // 10.0

明示的な変換 (強制)

大きい型 → 小さい型明示的なキャストが必要。データ損失の可能性を示すためです。

java
double pi = 3.14;
int x = (int) pi;     // 3 — 小数点以下切り捨て (四捨五入ではない)
System.out.println(x);

括弧の中に 変換先の型 を指定します。四捨五入ではなく切り捨て (truncate)3.993 になります。

よくある落とし穴 — 整数除算

java
int a = 5, b = 2;
System.out.println(a / b);          // 2  (整数同士で割ると整数)
System.out.println((double) a / b); // 2.5 (どちらか一方がdoubleなら結果もdouble)

最もよくあるバグ。整数同士で割ると 小数点以下が切り捨てられた 結果になります。

if · switch · ループ — 1ページでまとめ

if / else

java
int score = 85;
if (score >= 90) {
    System.out.println("A");
} else if (score >= 80) {
    System.out.println("B");   // 出力される
} else {
    System.out.println("C");
}

条件式は boolean でなければなりません。C言語のように if (x) で 0/1 を使うことはできません。

switch — 値の比較が多い場合

Java 14以降では アロー構文 がすっきりしています。

java
String day = "MON";
String korDay = switch (day) {
    case "MON", "TUE", "WED" -> "平日";
    case "SAT", "SUN"        -> "週末";
    default                  -> "不明";
};

旧構文 (Java 13以前) は break を忘れると次の case に処理が流れてしまう 落とし穴がありました — 新しいコードは アロー構文 を使いましょう。

for — 繰り返し回数が決まっている場合

java
for (int i = 0; i < 5; i++) {
    System.out.println(i);    // 0, 1, 2, 3, 4
}

順序は 初期化 → 条件チェック → 本体 → インクリメント → 条件チェック ...。これを ライフサイクル と呼びます。

while / do-while — 条件だけある場合

java
int n = 0;
while (n < 3) {       // まず条件を確認
    System.out.println(n++);
}

do {                   // とにかく一度実行してから条件
    System.out.println("少なくとも一度は実行");
} while (false);

do-while必ず1回実行 してから条件を確認します。実務ではほとんど使いません。

例題 — 1 〜 100 の合計

java
int sum = 0;
for (int i = 1; i <= 100; i++) {
    sum += i;
}
System.out.println(sum);   // 5050

配列 — 同じ型の複数の値をひとまとめに

配列の宣言と初期化

java
int[] arr = new int[5];          // 長さ5、すべて0で初期化
int[] nums = {10, 20, 30, 40};   // 値とともに宣言
String[] names = {"キム", "イ", "パク"};

int[] が「int の配列」型です。C スタイルの int arr[] も使えますが 推奨されません

アクセス — インデックスは 0 から

java
int[] nums = {10, 20, 30};
System.out.println(nums[0]);    // 10
System.out.println(nums[2]);    // 30
nums[1] = 999;                  // 修正
System.out.println(nums[1]);    // 999

インデックスが範囲外になると ArrayIndexOutOfBoundsException最もよく遭遇するランタイムエラー です。

長さ — .length

java
int[] nums = {10, 20, 30};
for (int i = 0; i < nums.length; i++) {
    System.out.println(nums[i]);
}

.length括弧なしのフィールド です (length() ではありません)。String の length() と混同しないように。

for-each — より簡潔な繰り返し

java
int[] nums = {10, 20, 30};
for (int n : nums) {
    System.out.println(n);
}

インデックスが不要なとき は圧倒的に読みやすい。ただし インデックスを取得できないため、要素を変更する場合は通常の for ループが適しています。

2次元配列

java
int[][] grid = {
    {1, 2, 3},
    {4, 5, 6}
};
System.out.println(grid[1][2]);   // 6 — 1行2列

ゲームボードや行列でよく使います。実務では ほとんど ArrayList を使いますが、アルゴリズム問題では配列の方が高速です。

次の学習へ

変数・制御構文・配列 — ここまでが すべての Java コードの基本材料 です。次の章 OOP では「なぜクラスにまとめる必要があるのか」を学びます。

☕ 実際に実行してみよう — 変数・データ型・演算・制御構文

基本型8種類と制御構文を一度に実行。値を変えながら結果を確認してみましょう。
☕ Java
✏️ 코드 편집기
📟 출력 결과
▶ 実行ボタンを押してください
💡 코드를 직접 수정하고 실행해보세요. 변수값을 바꾸거나 println을 추가해 결과를 확인하세요!
☁️ Judge0 API로 서버에서 실행 — Java / Python / JS / C++ 지원

🤖 AI にこう依頼してみよう

このレッスンの概念を知っていれば、AI に 具体的な 指示を出せます。漠然とした「直して」ではなく 語彙を持ったリクエスト — それがトークン節約の出発点です。

  • 「この Java コードの int と long、float と double の使い方を適切に修正して」
  • 「この for ループを拡張 for-each に書き換えて」
  • 「この if-else チェーンを switch 式 (Java 14+) にリファクタリングして」

なぜトークンが減るのか

概念を知らないと、AI の回答を受け取っても 「それって何ですか?」 と再度聞かなければなりません。その「再質問」がトークンを消費します。概念を一度身につければ 会話が一発で 終わります。

Java 変数・データ型・制御構文 — 本当の出発点 - Java