Java / LESSON 02 / JV02

Java:変数と型

1学習の目的

2基礎解説

Javaは型を宣言してから使う言語です。「この箱には整数しか入れない」と最初に決めるため、間違った値を入れようとすると実行前にエラーになります。

入るもの
int整数(約±21億まで)128000
double小数3.14
booleantrue / falsetrue
String文字列"ノートPC"
✅ 覚えるべき重要ポイント
  1. 変数は「型 名前 = 値;」の形で宣言するint price = 128000; のように、型を先に書くのがJavaの特徴。
  2. ⚠ 整数どうしの割り算は小数が切り捨てられる7 / 23 になる(3.5ではない)。小数が必要なら 7.0 / 2 のように片方を小数にする
  3. ⚠ double は誤差が出る0.1 + 0.20.30000000000000004 になる。金額の計算では要注意で、四捨五入や整数での計算を検討する。
  4. final を付けると変更できない定数になる。税率のような「途中で変わってほしくない値」に使う。慣習として名前は大文字にする。
  5. 小数から整数への変換は切り捨て(int) 3.993(4ではない)。四捨五入したいなら Math.round を使う。

現場使用例:金額・数量・割引率の管理、フラグ判定、商品名の保持。型を正しく選ぶことが、バグを防ぐ第一歩になる。

public class Main {
    public static void main(String[] args) {
        // 型 名前 = 値;
        int price = 128000;
        double rate = 0.1;
        boolean isMember = true;
        String name = "ノートPC";

        // 変数は後から変更できる
        price = 150000;

        // final を付けると変更できない(定数)
        final double TAX_RATE = 0.1;
        // TAX_RATE = 0.08;   ← エラーになる

        // ⚠ 整数どうしの割り算は切り捨て
        System.out.println(7 / 2);       // 3(3.5ではない)
        System.out.println(7.0 / 2);     // 3.5

        // ⚠ double は誤差が出る
        System.out.println(0.1 + 0.2);   // 0.30000000000000004

        // 小数 → 整数(切り捨て)
        int n = (int) 3.99;              // 3
        // 四捨五入したいなら
        long m = Math.round(3.99);       // 4

        // 文字列 → 数値
        int parsed = Integer.parseInt("123");

        // var で型を省略できる(Java 10以降)
        var count = 42;                  // int と推論される
    }
}

3基本ドリル(10問)

JV02-D01 int型の変数 price に 128000 を代入し、出力せよ。 コーディング★☆☆無料
期待される結果

出力 == 128000

ヒント

int price = 128000; と書く。

模範解答
public class Main {
    public static void main(String[] args) {
        int price = 128000;

        System.out.println(price);
    }
}
解説

型 名前 = 値; がJavaの変数宣言の形。型を先に書くのが、PythonやJavaScriptとの大きな違い。

JV02-D02 7 / 2 の結果はどれか(どちらも int)。
A. 3.5 B. 3 C. 4 D. エラー
選択★☆☆無料
期待される結果

解答 == B

ヒント

整数どうしの計算結果は整数になる。

模範解答
B
解説

小数点以下が切り捨てられて3になる。「平均を求めたら値がおかしい」という不具合の多くはこれが原因。

JV02-D03 4種類の型の変数を宣言して出力せよ(int:128000、double:3.14、boolean:true、String:"ノートPC")。1行にスラッシュ区切りで出力すること。 コーディング★☆☆無料
期待される結果

出力 == 128000 / 3.14 / true / ノートPC

ヒント

+ でつなぐ。区切りは " / " とする。

模範解答
public class Main {
    public static void main(String[] args) {
        int price = 128000;
        double rate = 3.14;
        boolean isMember = true;
        String name = "ノートPC";

        System.out.println(price + " / " + rate + " / " + isMember + " / " + name);
    }
}
解説

String だけ大文字始まり。int・double・boolean は基本型と呼ばれ、String はクラス——この違いはJV08で意味を持ってくる。

JV02-D04 整数型の変数を宣言するコードを完成させよ。 穴埋め★☆☆無料
コード
public class Main {
    public static void main(String[] args) {
        ____ count = 42;

        System.out.println(count);
    }
}
期待される結果

出力 == 42

ヒント

整数を表す型。小文字で3文字。

模範解答
int
解説

int は integer(整数)の略。約±21億までの整数を扱える。それを超えるなら long を使う。

JV02-D05 (int) 3.99 の結果はどれか。
A. 4 B. 3 C. 3.99 D. エラー
選択★☆☆無料
期待される結果

解答 == B

ヒント

小数から整数への変換は切り捨て。

模範解答
B
解説

四捨五入ではなく切り捨て。4にしたいなら Math.round(3.99) を使う。

JV02-D06 整数の割り算の罠を確認せよ。7 / 27.0 / 2 の結果を2行で出力すること。 コーディング★★☆広告解放
期待される結果

出力2行。3 / 3.5

ヒント

片方を小数にすると、結果も小数になる。

模範解答
public class Main {
    public static void main(String[] args) {
        System.out.println(7 / 2);
        System.out.println(7.0 / 2);
    }
}
解説

片方が小数なら、結果も小数になる。変数どうしの割り算では (double) a / b のようにキャストして小数にする。

JV02-D07 変更できない定数を宣言するコードを完成させよ。 穴埋め★★☆広告解放
コード
public class Main {
    public static void main(String[] args) {
        ____ double TAX_RATE = 0.1;

        System.out.println(TAX_RATE);
    }
}
期待される結果

出力 == 0.1

ヒント

「最終的な」を意味する5文字のキーワード。

模範解答
final
解説

final を付けると再代入できなくなる。税率や設定値など、途中で変わると困る値に使う。名前は大文字にするのが慣習。

JV02-D08 0.1 + 0.2 を double で計算するとどうなるか。
A. 0.3 B. 0.30000000000000004 C. 0 D. エラー
選択★★☆広告解放
期待される結果

解答 == B

ヒント

コンピュータは小数を正確に表せない。

模範解答
B
解説

2進数で小数を正確に表せないため誤差が出る。金額計算では四捨五入するか、整数(円単位)で計算するのが安全。

JV02-D09 文字列を数値に変換して計算せよ。文字列 "128000" を int に変換し、2倍して出力すること。 コーディング★★☆広告解放
期待される結果

出力 == 256000

ヒント

Integer.parseInt("128000") で変換できる。

模範解答
public class Main {
    public static void main(String[] args) {
        String input = "128000";
        int price = Integer.parseInt(input);

        System.out.println(price * 2);
    }
}
解説

文字列のままでは計算できない。フォームやファイルから読んだ値は文字列なので、必ず変換してから使う。

JV02-D10 var を使って型を省略し、変数2つ(数値42と文字列"個")を宣言して「42個」と出力せよ。 コーディング★★☆広告解放
期待される結果

出力 == 42個

ヒント

var count = 42; のように書くと、型が自動で決まる(Java 10以降)。

模範解答
public class Main {
    public static void main(String[] args) {
        var count = 42;
        var unit = "個";

        System.out.println(count + unit);
    }
}
解説

var は型を書かなくてよいが、型が無くなるわけではない。代入した値から自動で決まるだけで、後から違う型は入れられない。

4実践シナリオ(5問)

JV02-S01 【商品情報の管理】商品名・価格・在庫・セール対象かどうかを変数に入れ、「ノートPC:128000円(在庫5個)セール中」と出力せよ(ノートPC / 128000 / 5 / true)。 コーディング★★☆広告解放
期待される結果

出力 == ノートPC:128000円(在庫5個)セール中

ヒント

4つの変数を宣言し、+ でつなぐ。boolean はそのまま出力せず、文字で表現する。

模範解答
public class Main {
    public static void main(String[] args) {
        String name = "ノートPC";
        int price = 128000;
        int stock = 5;
        boolean onSale = true;

        System.out.println(name + ":" + price + "円(在庫" + stock + "個)"
                + (onSale ? "セール中" : "通常価格"));
    }
}
解説

三項演算子(条件 ? A : B)で表示を切り替えている。boolean をそのまま出力すると true と表示されてしまうので、人が読める言葉に変換する。

JV02-S02 【平均点の計算】3人の点数(80, 75, 91)の平均を小数で求めて出力せよ(整数の割り算にならないよう注意)。 コーディング★★☆広告解放
期待される結果

出力 == 82.0

ヒント

合計を double にキャストするか、3.0 で割る。

模範解答
public class Main {
    public static void main(String[] args) {
        int a = 80;
        int b = 75;
        int c = 91;

        int total = a + b + c;
        double average = total / 3.0;

        System.out.println(average);
    }
}
解説

3.0 で割るのが要点total / 3 だと整数の割り算になり、82.0 ではなく 82 になってしまう。

JV02-S03 【定数を使った税込計算】税率を final double TAX_RATE = 0.1 として定義し、128000円の税込価格を四捨五入して「税込:140800円」と出力せよ。 コーディング★★☆広告解放
期待される結果

出力 == 税込:140800円

ヒント

Math.round(price * (1 + TAX_RATE)) で計算する。

模範解答
public class Main {
    public static void main(String[] args) {
        final double TAX_RATE = 0.1;

        int price = 128000;
        long taxed = Math.round(price * (1 + TAX_RATE));

        System.out.println("税込:" + taxed + "円");
    }
}
解説

Math.round の戻り値は long 型(int ではない)。税率を定数にしておくと、変更が必要になったとき1箇所直すだけで済む。

JV02-S04 【小数の誤差を確かめる】0.1 + 0.2 の結果をそのまま出力し、続けて小数第2位で四捨五入した値も出力せよ(2行)。 コーディング★★★広告解放
期待される結果

出力2行。0.30000000000000004 / 0.3

ヒント

Math.round(x * 100) / 100.0 で小数第2位に丸められる。

模範解答
public class Main {
    public static void main(String[] args) {
        double sum = 0.1 + 0.2;

        System.out.println(sum);
        System.out.println(Math.round(sum * 100) / 100.0);
    }
}
解説

100倍して四捨五入し、100.0で割る——小数第2位に丸める定番の手法。最後を 100(整数)にすると整数の割り算になってしまうので 100.0 と書く。

JV02-S05 【入力値の変換】フォームから届いた文字列(数量 "3"、単価 "8500")を数値に変換し、小計を「小計:25500円」と出力せよ。 コーディング★★★広告解放
期待される結果

出力 == 小計:25500円

ヒント

Integer.parseInt で両方を変換してから掛ける。

模範解答
public class Main {
    public static void main(String[] args) {
        String qtyInput = "3";
        String priceInput = "8500";

        int qty = Integer.parseInt(qtyInput);
        int price = Integer.parseInt(priceInput);

        System.out.println("小計:" + (price * qty) + "円");
    }
}
解説

変換前と変換後で変数を分けるのが安全。もし変換せずに priceInput * qty と書けば、文字列は掛け算できないのでコンパイルエラーになる——Javaはここで守ってくれる。

5仕上げ課題

JV02-FINAL 【注文計算プログラム】変数と型を使い分けて、注文金額を計算せよ。

宣言する変数
String shopName"ゼロカラ商店"
String itemName"ノートPC"
int price128000
int qty2
boolean isMembertrue
final double TAX_RATE0.1(定数)
final double MEMBER_DISCOUNT0.1(定数)

計算
① 小計 = 単価 × 数量
② 割引額 = 会員なら小計 × 割引率を四捨五入、非会員なら0
③ 割引後 = 小計 - 割引額
④ 消費税 = 割引後 × 税率を四捨五入
⑤ 合計 = 割引後 + 消費税

期待される出力(5行)
=== ゼロカラ商店 ===
ノートPC 128000円 × 2
小計:256000円
会員割引:-25600円
合計:253440円


※ Math.round の戻り値は long 型である点に注意
総合★★★広告解放
期待される結果

出力5行が完全一致

ヒント

Math.round は long を返すので、割引額や税額は long 型で受ける。割引後 = 256000 - 25600 = 230400、税 = 23040、合計 = 253440。三項演算子で会員かどうかを分岐する。

模範解答
public class Main {
    public static void main(String[] args) {
        String shopName = "ゼロカラ商店";
        String itemName = "ノートPC";
        int price = 128000;
        int qty = 2;
        boolean isMember = true;

        final double TAX_RATE = 0.1;
        final double MEMBER_DISCOUNT = 0.1;

        int subtotal = price * qty;
        long discount = isMember ? Math.round(subtotal * MEMBER_DISCOUNT) : 0;
        long afterDiscount = subtotal - discount;
        long tax = Math.round(afterDiscount * TAX_RATE);
        long total = afterDiscount + tax;

        System.out.println("=== " + shopName + " ===");
        System.out.println(itemName + " " + price + "円 × " + qty);
        System.out.println("小計:" + subtotal + "円");
        System.out.println("会員割引:-" + discount + "円");
        System.out.println("合計:" + total + "円");
    }
}
解説

JV01では数値を直接書いていたが、変数を使うと一気に読みやすくなった。単価を変更したければ price の1行を直すだけで、計算式には手を触れなくてよい。これが変数を使う最大の理由だ。

Math.round の戻り値が long である点は、実際に書いてみないと気づきにくい。int discount = Math.round(...) と書くとコンパイルエラーになる——「longをintに入れようとしている」と怒られる。Javaはデータが失われる可能性のある代入を自動では許さないので、こうした場面で必ず止められる。面倒に感じるかもしれないが、これが「実行前に間違いが分かる」ということだ。

final の使い方にも注目してほしい。税率と割引率を定数にしたことで、「この値は途中で変わらない」という意図がコードに刻まれた。もし誰かが誤って TAX_RATE = 0.08; と書き換えようとすれば、その場でエラーになる。

そして三項演算子 isMember ? A : 0。会員かどうかで割引額を切り替えている。if文でも同じことができるが、こうした単純な二択では三項演算子のほうが簡潔になる——次章の条件分岐で、両方の書き方を扱う。

次章では演算と文字列を学ぶ。計算の優先順位や、文字列の操作方法を身につけていく。