数学と日付

このレッスンでは、数学演算と日付/時刻の処理を学びます。

Mathクラス

Mathクラスは一般的な数学演算メソッドを提供し、すべて静的です。

一般的なメソッド

メソッド 説明
abs() 絶対値 Math.abs(-5) → 5
max() 最大値 Math.max(3, 5) → 5
min() 最小値 Math.min(3, 5) → 3
ceil() 切り上げ Math.ceil(3.2) → 4.0
floor() 切り捨て Math.floor(3.8) → 3.0
round() 四捨五入 Math.round(3.5) → 4
sqrt() 平方根 Math.sqrt(16) → 4.0
pow() べき乗 Math.pow(2, 3) → 8.0
random() 乱数 Math.random() → [0.0, 1.0)

例:Mathの使用

JAVA
public class MathDemo {
    public static void main(String[] args) {
        // 絶対値
        System.out.println("abs(-5) = " + Math.abs(-5));  // 5
        
        // 最大値と最小値
        System.out.println("max(3, 5) = " + Math.max(3, 5));  // 5
        System.out.println("min(3, 5) = " + Math.min(3, 5));  // 3
        
        // 丸め
        System.out.println("ceil(3.2) = " + Math.ceil(3.2));  // 4.0
        System.out.println("floor(3.8) = " + Math.floor(3.8));  // 3.0
        System.out.println("round(3.5) = " + Math.round(3.5));  // 4
        
        // べき乗演算
        System.out.println("sqrt(16) = " + Math.sqrt(16));  // 4.0
        System.out.println("pow(2, 3) = " + Math.pow(2, 3));  // 8.0
    }
}
▶ 試してみよう

乱数の生成

JAVA
public class RandomDemo {
    public static void main(String[] args) {
        // 0.0から1.0の間の乱数
        double r1 = Math.random();
        System.out.println("乱数: " + r1);
        
        // 1から100の間のランダムな整数
        int r2 = (int) (Math.random() * 100) + 1;
        System.out.println("1-100の乱数: " + r2);
        
        // 範囲内の乱数(minからmax)
        int min = 10, max = 50;
        int r3 = (int) (Math.random() * (max - min + 1)) + min;
        System.out.println(min + "-" + max + "の乱数: " + r3);
    }
}

定数

定数 説明
Math.PI 円周率 3.141592653589793
Math.E 自然対数の底 2.718281828459045

例:円の面積を計算

JAVA
public class CircleArea {
    public static double area(double radius) {
        return Math.PI * Math.pow(radius, 2);
    }
    
    public static void main(String[] args) {
        double radius = 5;
        System.out.printf("半径%.1fの円の面積: %.2f%n", radius, area(radius));
        // 半径5.0の円の面積: 78.54
    }
}
▶ 試してみよう

日付/時刻API(Java 8+)

Java 8では、より使いやすい新しい日付/時刻APIが導入されました。

LocalDate:日付

JAVA
import java.time.LocalDate;

public class LocalDateDemo {
    public static void main(String[] args) {
        // 今日
        LocalDate today = LocalDate.now();
        System.out.println("今日: " + today);  // 2026-06-24
        
        // 特定の日付
        LocalDate birthday = LocalDate.of(2000, 1, 15);
        System.out.println("誕生日: " + birthday);
        
        // フィールドを取得
        System.out.println("年: " + today.getYear());
        System.out.println("月: " + today.getMonthValue());
        System.out.println("日: " + today.getDayOfMonth());
        System.out.println("曜日: " + today.getDayOfWeek());
    }
}

LocalTime:時刻

JAVA
import java.time.LocalTime;

public class LocalTimeDemo {
    public static void main(String[] args) {
        // 現在
        LocalTime now = LocalTime.now();
        System.out.println("現在: " + now);  // 14:30:45.123
        
        // 特定の時刻
        LocalTime meeting = LocalTime.of(14, 30);
        System.out.println("会議: " + meeting);
        
        // フィールドを取得
        System.out.println("時: " + now.getHour());
        System.out.println("分: " + now.getMinute());
        System.out.println("秒: " + now.getSecond());
    }
}

LocalDateTime:日付と時刻

JAVA
import java.time.LocalDateTime;

public class LocalDateTimeDemo {
    public static void main(String[] args) {
        // 現在の日付と時刻
        LocalDateTime now = LocalDateTime.now();
        System.out.println("現在: " + now);
        
        // 特定の日付と時刻
        LocalDateTime meeting = LocalDateTime.of(2026, 6, 25, 14, 30);
        System.out.println("会議: " + meeting);
    }
}

日付演算

JAVA
import java.time.LocalDate;

public class DateCalc {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        
        // 日数を加算/減算
        LocalDate tomorrow = today.plusDays(1);
        LocalDate lastWeek = today.minusWeeks(1);
        LocalDate nextMonth = today.plusMonths(1);
        
        System.out.println("今日: " + today);
        System.out.println("明日: " + tomorrow);
        System.out.println("先週: " + lastWeek);
        System.out.println("来月: " + nextMonth);
        
        // 日付の比較
        LocalDate date1 = LocalDate.of(2026, 1, 1);
        LocalDate date2 = LocalDate.of(2026, 12, 31);
        System.out.println("date1はdate2より前: " + date1.isBefore(date2));
        System.out.println("date1はdate2より後: " + date1.isAfter(date2));
    }
}

日付のフォーマット

JAVA
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateFormat {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        
        // フォーマット
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formatted = now.format(formatter);
        System.out.println("フォーマット: " + formatted);
        
        // パース
        LocalDateTime parsed = LocalDateTime.parse("2026-06-25 14:30:00", formatter);
        System.out.println("パース: " + parsed);
    }
}

一般的なフォーマットパターン

パターン 説明
yyyy 2026
MM 06
dd 25
HH 時(24時間) 14
mm 30
ss 45

例:年齢を計算

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

public class AgeCalculator {
    public static int calculateAge(LocalDate birthday) {
        LocalDate today = LocalDate.now();
        Period period = Period.between(birthday, today);
        return period.getYears();
    }
    
    public static void main(String[] args) {
        LocalDate birthday = LocalDate.of(2000, 1, 15);
        int age = calculateAge(birthday);
        System.out.println("年齢: " + age);
    }
}

例:日数を計算

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

public class DaysBetween {
    public static void main(String[] args) {
        LocalDate start = LocalDate.of(2026, 1, 1);
        LocalDate end = LocalDate.of(2026, 12, 31);
        
        long days = ChronoUnit.DAYS.between(start, end);
        System.out.println("日数: " + days);  // 364
    }
}

❓ よくある質問

Q Math.random()の範囲は?
A [0.0, 1.0)—0.0を含みますが、1.0は含みません。
Q LocalDateとDateの違いは何ですか?
A LocalDateはJava 8の新しいAPIで、不変でスレッドセーフです。Dateは古いAPIで、可変でスレッドセーフではありません。LocalDateが推奨されます。
Q 現在のタイムスタンプを取得するにはどうすればいいですか?
A ミリ秒にはSystem.currentTimeMillis()を使用し、InstantオブジェクトにはInstant.now()を使用してください。

📖 まとめ

📝 演習

  1. 乱数: 1-100の間の10個の乱数を生成し、最大値、最小値、平均値を見つける
  2. 日付計算: 今日から2027年1月1日までの日数を計算
  3. 年齢計算: 誕生日を入力し、年齢と次の誕生日までの日数を計算

次のレッスン

次のレッスンでは、実践:文字列処理を学びます — 文字列関連の知識を適用します。

100%