読み込み中...

Javaで簡単年齢計算!たったの6ステップでマスターするプログラミング入門

年齢計算のJavaプログラムを書いたイラスト Java
この記事は約32分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Javaで年齢計算を扱うなら、LocalDateで生年月日と基準日を表し、Period.betweenで年単位の差を取り出す形が扱いやすくなります。その計算はプログラミング入門の題材としても相性がよく、日付型、条件分岐、入力処理、画面表示までを一連の流れで確認できます。

そのため、単に現在年から生年を引くだけではなく、誕生日が到来しているか、2月29日生まれをどう扱うか、入力値が正しい形式かまで整理しておく必要があるのが基本です。Javaの標準APIを使えば、年齢計算の多くは独自の暦計算を書かずに表現できます。

動作確認環境
  • Java 21 LTS
  • OpenJDK 21 / 標準ライブラリ java.timejavax.swing

公式仕様を確認する場合は、日付を表すOracle Java SE 21 LocalDate APIと、日付間の期間を扱うOracle Java SE 21 Period APIが一次情報になります。関連する基礎として、配列やコレクションの整理にはJava List型完全ガイド、うるう年の分岐にはJavaでうるう年を判定する解説も参照できます。

📖 この記事で学べること
  • Javaで年齢計算を行う基本構造
  • LocalDatePeriodの使い方
  • 誕生日到来前やうるう年を考慮する考え方
  • 入力値を使ったサンプルコードの読み方
  • 人事管理、ヘルスケア、推薦処理への応用例

年齢計算の基本知識

Javaの年齢計算は、基準日と生年月日の差を年単位で求める処理です。結論から言えば、標準ライブラリのjava.timeを使い、LocalDateで日付を持ち、Period.betweenで差分を求める方法が現在のJavaでは自然です。

import java.time.LocalDate;
import java.time.Period;

public class MinimumAgeCalculator {
    public static void main(String[] args) {
        LocalDate birthDate = LocalDate.of(1995, 5, 20);
        LocalDate today = LocalDate.now();
        int age = Period.between(birthDate, today).getYears();

        System.out.println("年齢は " + age + " 歳です。");
    }
}

結果: 期待される出力は、実行日の年月日に応じて「年齢は XX 歳です。」という形式になります。

このコードでは、LocalDate.ofが固定の生年月日を作り、LocalDate.nowが実行時点の日付を取得します。その差はPeriodとして表され、getYearsで満年齢だけを取り出せますし、ここがポイントです。

要素 役割 代表的なAPI 注意点
生年月日計算の起点LocalDate.of月日は1始まりで渡します
基準日年齢を判定する日LocalDate.now実行日で結果が変わります
期間2日付間の差Period.between年、月、日に分かれます
満年齢経過した年数getYears誕生日未到来を含めて扱えます
うるう年2月29日の考慮plusYears業務ルールの確認が必要です
入力ユーザー値の受け取りScanner形式不正に備えます
変換文字列から日付へ変換LocalDate.parseYYYY-MM-DD形式が前提です
分岐年齢帯の判定if / else if境界値を明確にします
対応表年齢帯と値の紐付けHashMapキー設計を統一します

Javaとは

Javaは、クラスを中心に処理を組み立てるオブジェクト指向のプログラミング言語です。Webアプリケーション、業務システム、Android関連開発など幅広い用途で使われ、プログラミング入門でも文法と設計の基礎を学びやすい言語として扱われます。

一方、年齢計算のような日付処理では、古いDateCalendarよりも、Java 8以降で追加されたjava.timeの使い方を押さえるほうが現実的です。LocalDatePeriodChronoUnitは、年月日を明示的に扱えるため、コードの意図も読み取りやすくなります。

その考え方は、例外処理やコレクションを学ぶ場面にもつながりますが、これは押さえたい点です。入力値の扱いに不安がある場合はJavaエスケープ処理の基礎、メソッドの上書きやクラス設計を深めたい場合はJavaオーバーライドの解説が補助になります。

年齢計算の必要性

年齢計算は、会員登録、保険、医療、教育、人事管理、商品の推薦などで使われる処理です。たとえば年齢制限を満たすか判定する場合、単純な生年差では境界日の誤判定が起きるため、月日まで含めた判定が求められます。

そのため、Javaで年齢計算を書くときは、要件として「今日時点の満年齢」なのか、「年度末時点の年齢」なのか、「誕生日当日の扱いをどうするか」を先に決めますし、これが一つの目安です。この前提が曖昧なままサンプルコードを流用すると、業務ルールと計算結果がずれる可能性があります。

💡 Tips: プログラミング入門では、現在年から生年を引く式から始めても問題ありません。ただし実用寄りの年齢計算では、MonthDayOfMonthを含む日付型で考えると整理しやすくなります。

Javaで年齢計算の作り方

Javaで年齢計算を作る流れは、基準日を用意し、生年月日を用意し、2つの日付差から満年齢を取り出す形になるのが目安です。使い方の核は短く、LocalDateで日付を作り、Period.betweenの戻り値からgetYearsを読むだけです。

具体的には、フォーム入力やファイル読込で得た文字列をLocalDate.parseで日付へ変換し、基準日としてLocalDate.nowまたは指定日を渡します。サンプルコードを読むときは、どの日付が「生年月日」で、どの日付が「判定日」なのかを区別すると理解しやすくなります。

詳細な使い方

基本式は現在年から誕生年を引く形ですが、誕生日がまだ来ていない年は1歳差し引く必要があるのがポイントです。その補正を自力で書く場合、ifで月日を比較するか、Period.betweenに任せるかを選びます。

一般に、プログラミング入門の段階では変数で計算の流れを見える形にし、慣れてきたらjava.timeのAPIに置き換える進め方が理解しやすいでしょう。Javaの年齢計算では、読みやすさと正確さの両方を保つことが大切になります。

変数の設定

年だけを使う最小の例では、int型の変数に現在年と誕生年を入れますが、覚えておくと役立つでしょう。この形は日付APIの前段として、変数、代入、引き算の関係を確認する用途に向いています。

int currentYear = 2023; // 例として2023年としていますが、実際にはシステム日付から取得することが多いです。
int birthYear = 1995;

結果: 期待される状態は、currentYear2023birthYear1995が保持されることです。

この段階では年齢そのものはまだ計算していません。ただし、currentYear - birthYearという式を作れる準備が整い、後続の条件分岐で誕生日未到来の補正を加えられます。

計算方法

年だけの差分は単純ですが、誕生日がまだ到来していない場合は満年齢より1大きい値になります。そのため、月日を比較した結果に応じてageを減らす分岐が必要です。

int age = currentYear - birthYear;

// 誕生日が来ていない場合は、1を引く
if (/* 誕生日が来ていない条件 */) {
    age = age - 1;
}

結果: 期待される状態は、誕生日が未到来ならageが1小さくなり、到来済みなら生年差のまま残ることです。

このコードは考え方を示す断片であり、条件部分は実際の月日比較に置き換えますし、ここを基本と考えるとよいでしょう。JavaではbirthDate.plusYears(age)currentDateを比べると、誕生日を過ぎたかどうかを表現しやすくなります。

⚠️ 注意: 年齢計算では、365日で割る式だけに頼ると、うるう年や時刻差の影響で誤差が出ることがあります。学習用の概算なら使えますが、満年齢の判定にはLocalDateを使うほうが扱いやすくなるのが一般的です。

詳細なサンプルコード

詳細なサンプルコードでは、Javaの標準APIを使った年齢計算、うるう年を含む判定、誕生日までの日数、利用者入力、GUIの使い方を順に確認します。各例は独立したpublic classとして書いているため、ファイル名とクラス名を合わせて実行する必要があります。

そのまま複数の例を同じフォルダで動かす場合は、同名のAgeCalculatorクラスが重複しないようにファイル名やクラス名を調整してください。サンプルコードの目的は、年齢計算の使い方を小さな単位で理解することです。

サンプルコード1:基本的な年齢計算

基本形では、生年月日をLocalDate.ofで作り、現在日付との差をPeriod.betweenで求めますし、ここがポイントです。Javaの年齢計算では、この形を起点に入力処理や業務分岐を足していくと読みやすくなります。

import java.time.LocalDate;
import java.time.Period;

public class AgeCalculator {
    public static void main(String[] args) {
        LocalDate birthDate = LocalDate.of(1990, 1, 1);  // 生年月日を設定します
        LocalDate currentDate = LocalDate.now();  // 現在の日付を取得します

        Period period = Period.between(birthDate, currentDate);  // 生年月日と現在の日付の差を計算します
        int age = period.getYears();  // 年齢を計算します

        System.out.println("年齢は " + age + " 歳です。");  // 年齢を出力します
    }
}

結果: 期待される出力は、実行日の年月日に応じて「年齢は XX 歳です。」という形式になります。

このサンプルコードでは、birthDateが生年月日、currentDateが基準日です。Period.betweenは年、月、日の差を持つPeriodを返し、period.getYears()で満年齢に相当する年数を取得できます。

ただし、LocalDate.nowは実行日によって値が変わりますが、これは押さえたい点です。テストや教材として出力を固定したい場合は、LocalDate.of(2026, 6, 21)のように基準日を明示する使い方もあります。

サンプルコード2:閏年を考慮した計算

2月29日生まれの扱いは、年齢計算で初心者がつまずきやすい点です。JavaのLocalDateは有効な日付だけを扱うため、うるう年の日付も型として安全に表現できます。

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class AgeCalculatorLeapYear {
    public static void main(String[] args) {
        // 誕生日をyyyy-mm-ddの形式で入力
        LocalDate birthDate = LocalDate.of(2000, 2, 29);

        // 現在の日付を取得
        LocalDate currentDate = LocalDate.now();

        // 年数を計算
        long years = ChronoUnit.YEARS.between(birthDate, currentDate);

        // 月日を考慮した年齢計算
        if (birthDate.plusYears(years).isAfter(currentDate)) {
            years = years - 1;
        }

        // 結果を表示
        System.out.println("あなたの年齢は " + years + " 歳です");
    }
}

結果: 期待される出力は、実行日の年月日に応じて「あなたの年齢は XX 歳です」という形式になります。

この例ではChronoUnit.YEARS.betweenで年数を求め、birthDate.plusYears(years)が基準日より後なら1年戻します。うるう年の考慮はAPIが支援しますが、2月29日を平年の2月28日扱いにするか3月1日扱いにするかは、サービスの規約や業務ルールで決める領域です。

そのため、誕生日判定を伴うプログラムでは、法務や運用上の定義をコードコメントや仕様書に残すと読み手が迷いにくくなるのが現実的です。うるう年そのものの判定を学ぶ場合は、関連リソースのJavaでうるう年を判定するサンプルも役立ちます。

サンプルコード3:誕生日までの日数を計算

誕生日までの日数を求める処理は、年齢計算と同じく日付差分を扱います。ただしPeriod.getDaysは期間の日数部分だけを返すため、月をまたぐ総日数の計算には注意が必要です。

import java.time.LocalDate;
import java.time.Period;

public class BirthdayCountdown {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate birthday = LocalDate.of(2024, 1, 1);

        Period period = Period.between(today, birthday);
        System.out.println("誕生日までの日数は " + period.getDays() + " 日です。");
    }
}

結果: 期待される出力は「誕生日までの日数は XX 日です。」という形式ですが、getDaysは総日数ではなく日付差分の日要素を返します。

このサンプルコードは、Periodの使い方を確認する短い例です。総日数を求めたい場合は、ChronoUnit.DAYS.between(today, birthday)を使うほうが目的に合います。

一方、誕生日まで「何か月と何日」のように表示したいなら、PeriodgetMonthsgetDaysが使えると整理できます。Javaの日付処理では、総量が必要なのか、年月日を分けた期間が必要なのかを先に決めるとミスを減らせます。

サンプルコード4:使用者の年齢を計算

利用者が入力した生年月日から年齢計算を行う場合は、Scannerで文字列を受け取り、LocalDate.parseで日付型へ変換します。プログラミング入門では、入力、変換、計算、出力の流れをひとつのmainで追える題材になると理解できます。

import java.time.LocalDate;
import java.time.Period;
import java.util.Scanner;

public class CalculateAge {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("誕生日をYYYY-MM-DDの形式で入力してください: ");
        String input = scanner.nextLine();

        LocalDate birthDate = LocalDate.parse(input);
        LocalDate currentDate = LocalDate.now();

        Period period = Period.between(birthDate, currentDate);

        System.out.println("あなたの年齢は " + period.getYears() + " 歳です。");
    }
}

結果: 期待される出力は、入力した生年月日と実行日の関係に応じて「あなたの年齢は XX 歳です。」という形式になります。

このコードでは、scanner.nextLineが入力行を受け取り、LocalDate.parseStringLocalDateへ変換します。標準形式のYYYY-MM-DD以外を入力するとDateTimeParseExceptionが発生するため、実用では例外処理を追加すると覚えるとよいでしょう。

ただし、教材としては例外処理を省いたほうが処理の流れを追いやすい場合があります。実務寄りに広げるなら、trycatchfinallyscanner.closeを組み合わせ、入力不正時のメッセージを分ける構成が自然です。

サンプルコード5:GUIを用いた年齢計算アプリケーション

GUIで年齢計算を行う場合は、入力欄、ボタン、結果表示を画面に配置し、ボタン操作をきっかけに計算を実行します。Java標準のSwingを使うと、JFrameJPanelJLabelJTextFieldJButtonで小さな画面を作れますし、これが一つの目安です。

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class AgeCalculatorApp {
    public static void main(String[] args) {
        JFrame frame = new JFrame("年齢計算アプリケーション");
        frame.setSize(400, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        frame.add(panel);
        placeComponents(panel);

        frame.setVisible(true);
    }

    private static void placeComponents(JPanel panel) {

        panel.setLayout(null);

        JLabel userLabel = new JLabel("誕生日:");
        userLabel.setBounds(10, 20, 80, 25);
        panel.add(userLabel);

        JTextField userText = new JTextField(20);
        userText.setBounds(100, 20, 165, 25);
        panel.add(userText);

        JButton calculateButton = new JButton("計算");
        calculateButton.setBounds(10, 80, 80, 25);
        panel.add(calculateButton);

        JLabel resultLabel = new JLabel("あなたの年齢:");
        resultLabel.setBounds(10, 110, 200, 25);
        panel.add(resultLabel);

        calculateButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String birthDateString = userText.getText();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                try {
                    Date birthDate = sdf.parse(birthDateString);
                    Date currentDate = new Date();
                    long age = (currentDate.getTime() - birthDate.getTime()) / (365 * 24 * 60 * 60 * 1000L);
                    resultLabel.setText("あなたの年齢: " + age + "歳");
                } catch (ParseException parseException) {
                    resultLabel.setText("日付の形式が正しくありません");
                }
            }
        });
    }
}

結果: 期待される表示は、yyyy-MM-dd形式で誕生日を入力して「計算」ボタンを押すと、画面上のラベルに年齢またはエラーメッセージが出る状態です。

このGUI例は、元記事の構成を保つためにSimpleDateFormatDateを含めています。ただし現在のJavaで日付計算を書くなら、LocalDatePeriodを使うほうが、うるう年や日付境界を扱いやすくなります。

そのため、画面部品の使い方を学ぶ例としては有効ですが、計算部分はjava.timeへ置き換えるのが現行の書き方です。Swingそのものは標準ライブラリに含まれるため、軽いデスクトップ教材として扱えますが、覚えておくと役立つでしょう。

サンプルコード5の計算部分をjava.timeへ置き換える例

GUIの枠組みはそのままに、年齢計算だけをjava.timeへ寄せると、計算意図が明確になります。この置き換えは、古い日付APIを学習目的で見たあとに現行の使い方へ進む橋渡しになります。

import java.time.LocalDate;
import java.time.Period;

String birthDateString = "1990-05-20";
LocalDate birthDate = LocalDate.parse(birthDateString);
LocalDate currentDate = LocalDate.now();
int age = Period.between(birthDate, currentDate).getYears();

System.out.println("あなたの年齢: " + age + "歳");

結果: 期待される出力は、基準日と入力日付に応じて「あなたの年齢: XX歳」という形式になると考えられます。

この断片はActionListenerの内部に組み込めます。SimpleDateFormatParseExceptionDateを使わずに済むため、サンプルコード全体の見通しも良くなります。

ℹ️ 補足: DateSimpleDateFormatは既存コードで見かけることがあると言えるでしょう。新しくJavaの年齢計算を書く場合は、公式ドキュメントが示すjava.time系APIを優先すると整理しやすくなります。

Javaでの年齢計算の応用例とサンプルコード

年齢計算は単体で完結する処理ではなく、判定や推薦、スケジュール作成と組み合わせて価値が出ます。Javaで応用例を作るときは、年齢を求める処理と、年齢に応じて分岐する処理を分けると読みやすくなるのが基本です。

具体的には、人事管理では従業員の満年齢、ヘルスケアでは利用者への助言、ECでは商品推薦、動画サービスでは作品推薦のように、同じ年齢計算でも使い方が変わります。応用例ごとのサンプルコードでは、分岐条件の境界を明確に置くことがポイントになります。

応用例1:企業の人事管理システム

人事管理では、健康診断、資格更新、福利厚生、退職関連の判定などで年齢計算が使われますし、ここを基本と考えるとよいでしょう。Javaで書く場合も、従業員の生年月日をLocalDateで持ち、基準日時点の満年齢を取得する形が土台になります。

import java.time.LocalDate;
import java.time.Period;

public class AgeCalculation {
    public static void main(String[] args) {
        LocalDate birthDate = LocalDate.of(1980, 6, 15);
        LocalDate currentDate = LocalDate.now();

        Period period = Period.between(birthDate, currentDate);
        int age = period.getYears();

        System.out.println("従業員の年齢は: " + age + "歳です");
    }
}

結果: 期待される出力は、実行日の年月日に応じて「従業員の年齢は: XX歳です」という形式になります。

このサンプルコードでは、birthDateを従業員の生年月日として固定しています。実際の人事管理システムでは、データベースから取得した値をLocalDateへ変換し、年度末や基準日を指定して計算するケースもあるのが目安です。

その場合は、LocalDate.nowに依存させず、LocalDate referenceDateのような引数として基準日を渡す設計が向いています。計算処理をメソッド化すれば、単体テストでも境界日を確認しやすくなります。

応用例2:ヘルスケアアプリ

ヘルスケアアプリでは、年齢帯に応じて表示するメッセージや運動メニューを変える応用例があるのがポイントです。医学的な助言を自動化する場合は専門的な監修や規約確認が必要ですが、学習用のサンプルコードでは条件分岐の練習として扱えます。

import java.time.LocalDate;
import java.time.Period;
import java.util.Scanner;

public class HealthCareApp {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("生年月日をYYYY-MM-DDの形式で入力してください: ");
        String input = scanner.nextLine();

        LocalDate birthDate = LocalDate.parse(input);
        LocalDate currentDate = LocalDate.now();

        Period period = Period.between(birthDate, currentDate);
        int age = period.getYears();

        if (age < 20) {
            System.out.println("年齢は" + age + "歳です。定期的な運動を心掛けましょう。");
        } else if (age < 40) {
            System.out.println("年齢は" + age + "歳です。バランスの良い食事を心掛け、定期的な健康診断を受けましょう。");
        } else {
            System.out.println("年齢は" + age + "歳です。健康管理をしっかりと行いましょう。");
        }

        scanner.close();
    }
}

結果: 期待される出力は、入力した生年月日から求めた年齢に応じて、20歳未満、40歳未満、40歳以上のいずれかのメッセージが表示される形式です。

この例では、Scannerで受け取った文字列をLocalDate.parseで日付化し、Period.betweenで年齢を求めます。分岐はage < 20age < 40、それ以外という順で評価されるため、条件の並びも結果に影響します。

ただし、ヘルスケアの表示文は利用者の健康判断に関わる可能性があるのが一般的です。学習用のプログラミング入門では文法理解に留め、公開サービスでは専門家監修、免責表記、個人情報保護の設計を別途検討する必要があります。

サンプルコード6:年齢に応じた商品推奨システム

商品推奨では、年齢帯とおすすめ商品を対応づける処理がよく使われます。JavaではHashMapに年齢帯のキーと表示文を入れ、年齢計算の結果に応じて取り出す構成にできるのが現実的です。

import java.time.LocalDate;
import java.time.Period;
import java.util.HashMap;
import java.util.Map;

public class ProductRecommendation {

    public static void main(String[] args) {
        HashMap<String, String> productRecommendations = new HashMap<>();
        productRecommendations.put("10-19", "青少年向けの漫画");
        productRecommendations.put("20-29", "最新の技術ガジェット");
        productRecommendations.put("30-39", "健康とウェルネスの商品");
        productRecommendations.put("40-49", "高級スキンケア製品");
        productRecommendations.put("50以上", "健康とウェルネスの商品");

        int birthYear = 1990;
        int birthMonth = 5;
        int birthDay = 20;

        LocalDate birthDate = LocalDate.of(birthYear, birthMonth, birthDay);
        LocalDate currentDate = LocalDate.now();

        int age = Period.between(birthDate, currentDate).getYears();

        String productRecommendation = getProductRecommendation(productRecommendations, age);
        System.out.println("推奨商品: " + productRecommendation);
    }

    public static String getProductRecommendation(HashMap<String, String> recommendations, int age) {
        if (age < 20) {
            return recommendations.get("10-19");
        } else if (age < 30) {
            return recommendations.get("20-29");
        } else if (age < 40) {
            return recommendations.get("30-39");
        } else if (age < 50) {
            return recommendations.get("40-49");
        } else {
            return recommendations.get("50以上");
        }
    }
}

結果: 期待される出力は、実行日における年齢帯に応じて「推奨商品: 健康とウェルネスの商品」などの商品名が表示される形式です。

このサンプルコードでは、HashMap<String, String>に年齢帯と商品名を保持しています。getProductRecommendationメソッドに推薦ロジックを切り出しているため、年齢計算と商品選択の責務が分かれています。

一方、import java.util.Mapはこのコードでは直接使われていません。学習用には残しても動作上の問題はありませんが、読みやすさを優先するなら未使用のimportを削除すると整理できます。

応用例として会員ランクや年齢制限を扱う場合は、境界値のテストが欠かせません。たとえば19歳、20歳、29歳、30歳のような境界を入力し、ifの条件が意図どおり評価されるかを確認します。

サンプルコード7:年齢に応じた映画推薦システム

映画推薦では、入力された年齢そのものを使ってカテゴリを分ける簡易な応用例を作れます。生年月日から計算する例とは異なり、年齢をintとして受け取るため、条件分岐の使い方に集中できると理解できます。

import java.util.Scanner;

public class MovieRecommendation {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("年齢を入力してください: ");
        int age = scanner.nextInt();

        recommendMovies(age);
    }

    public static void recommendMovies(int age) {
        if(age < 13) {
            System.out.println("おすすめの映画: トイ・ストーリー, くまのプーさん");
        } else if(age >= 13 && age < 18) {
            System.out.println("おすすめの映画: ハリー・ポッター, パーシー・ジャクソン");
        } else {
            System.out.println("おすすめの映画: インセプション, ショーシャンクの空に");
        }
    }
}

結果: 期待される出力は、入力した年齢が12なら子ども向け、13以上18未満ならティーン向け、18以上なら大人向けの映画リストが表示される形式です。

この例ではScanner.nextIntで整数を受け取り、recommendMoviesメソッドへ渡します。age >= 13 && age < 18のように複数条件を組み合わせると、年齢帯を明示できます。

ただし、入力が数字以外の場合はInputMismatchExceptionが発生すると覚えるとよいでしょう。実用の使い方では、入力前に文字列として受け取り、Integer.parseIntと例外処理で不正入力を案内する構成が向いています。

💡 Tips: 応用例を広げるときは、年齢計算のメソッドと推薦メソッドを分けると変更しやすくなります。calculateAgerecommendMoviesgetProductRecommendationのように目的が読める名前を付けると、コードレビューでも意図が伝わりやすくなると考えられます。

これらの応用例では、年齢計算そのものは短い処理に収まります。むしろ実際の設計では、年齢帯の境界、入力形式、個人情報の扱い、表示文の管理をどう分けるかが課題になります。

そのため、Javaのプログラミング入門としては、public static void mainに処理をまとめる形から始め、慣れてきたらstaticメソッドへ切り出すと理解が進みますし、ここがポイントです。大きなアプリケーションでは、計算ロジックをサービス層に置き、画面や入力処理から分離する設計が一般的です。

まとめ

Javaで年齢計算を行う中心は、LocalDateで生年月日と基準日を表し、Period.betweenで満年齢を求める流れです。現在年から生年を引く考え方も入口として使えますが、誕生日未到来やうるう年を含めるなら日付APIを使うほうが安定します。

その理解ができると、入力値を扱うScanner、分岐を作るif、対応表を持つHashMap、GUIを構成するSwingまで応用できます。年齢計算の使い方は、プログラミング入門の練習だけでなく、人事管理、ヘルスケア、商品推薦、映画推薦などの応用例へ自然につながりますが、これは押さえたい点です。

ただし、公開サービスで年齢を扱う場合は、入力チェック、例外処理、個人情報保護、基準日の定義を仕様として明確にする必要があります。サンプルコードを土台にする場合も、DateTimeParseExceptionInputMismatchException、境界値テストを追加し、利用目的に合う形へ調整します。

Javaの年齢計算を身につけると、日付型、条件分岐、標準入力、メソッド分割、コレクションの基礎をまとめて確認できると言えるでしょう。関連して、注釈の仕組みを深めるならJavaアノテーションの解説、リスト構造を扱うならJava List型の入門記事も学習の補助になります。

関連記事

著者: Japanシーモア編集部

Japanシーモアは、Web/IoT/APP/SYS 分野のプログラミング情報を体系的に提供するメディアです。本記事は編集部による執筆とAI支援を組み合わせて制作し、公開前に編集部が校正しています。誤りや改善案がございましたらお問い合わせよりご連絡ください。

※本記事は実在のエンジニア複数名で構成される Japanシーモア編集部が、AI支援を活用して作成・校正・公開しています。