数学と日付
このレッスンでは、数学演算と日付/時刻の処理を学びます。
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()を使用してください。📖 まとめ
- Mathクラスは数学演算メソッドを提供し、すべて静的
- 一般的なメソッド:abs/max/min/ceil/floor/round/sqrt/pow/random
- Java 8の日付API:LocalDate/LocalTime/LocalDateTime
- 日付演算にはplus/minusメソッドを使用
- 日付のフォーマットにはDateTimeFormatterを使用
📝 演習
- 乱数: 1-100の間の10個の乱数を生成し、最大値、最小値、平均値を見つける
- 日付計算: 今日から2027年1月1日までの日数を計算
- 年齢計算: 誕生日を入力し、年齢と次の誕生日までの日数を計算
次のレッスン
次のレッスンでは、実践:文字列処理を学びます — 文字列関連の知識を適用します。



