初めから動くタイマーを作成するのは難しいと考えました。
そのため以下のように分割して作業を行なった
- ターミナルでシンプルなカウントダウンタイマーを作る
- 1秒ごとにカウントダウンを表示する
- 集中時間と休憩時間を設定できるポモドーロタイマーを作る
- タイマーの表示を「分:秒」形式にする
ステップ1:ターミナルでシンプルなカウントダウンタイマーを作る
まずは、ターミナル上で指定した秒数をカウントダウンするシンプルなタイマーを作成します。
{
private Timer timer; // タイマーオブジェクト
// コンストラクタ
public CountdownTimer(int seconds) {
timer = new Timer();
final int milliseconds = seconds * 1000; // ミリ秒単位に変換
// タイマーをスケジュール
timer.schedule(new CountdownTask(), milliseconds);
}
// タイマーのタスク
class CountdownTask extends TimerTask {
@Override
public void run() {
System.out.println("カウントダウン終了!"); // カウントダウン終了メッセージ
timer.cancel(); // タイマーを停止
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("カウントダウンする秒数を入力してください:");
int countdownSeconds = scanner.nextInt(); // ユーザーから秒数を入力
new CountdownTimer(countdownSeconds);
System.out.println(countdownSeconds + "秒間カウントダウンをします。"); // カウントダウン開始メッセージ
scanner.close(); // Scannerを閉じる
}
}
このコードでは、Timer
クラスとTimerTask
クラスを使って、指定された秒数後に「カウントダウン終了!」と表示します。

ステップ2:1秒ごとにカウントダウンを表示する
次に、1秒ごとにカウントダウンの残り時間を表示するように修正します。
// タイマーのタスク
public void startCountDown() {
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (remainigSeconds > 0) {
System.out.println(remainigSeconds + "秒");
remainigSeconds--;
}else{
System.out.println("終了");
timer.cancel();
}
}
}, 0, 1000);
}
scheduleAtFixedRate
メソッドを使うことで、指定した間隔(ここでは1秒)でrun
メソッドが実行されます。

ステップ3:集中時間と休憩時間を設定できるポモドーロタイマーを作る
さらに、集中時間と休憩時間を交互に繰り返すポモドーロタイマーを作成します。
class PomodoroTimer {
private int workSeconds;
private int breakSeconds;
private boolean isWorkTime = true;
public PomodoroTimer(int workSeconds, int breakSeconds) {
this.workSeconds = workSeconds;
this.breakSeconds = breakSeconds;
}
private void startTimer(int seconds, String message) {
CountdownTimer timer = new CountdownTimer(seconds);
timer.startCountdown(() -> {
if (isWorkTime) {
isWorkTime = false;
startTimer(breakSeconds, "休憩");
} else {
System.out.println("ポモドーロタイマー終了");
}
});
System.out.println(message + "開始");
}
}
isWorkTime
変数を使って、集中モードと休憩モードを切り替えます。
ステップ4:タイマーの表示を「分:秒」形式にする
最後に、タイマーの表示を「分:秒」形式に修正します。
// 分と秒に変換
int minutes = remainingSeconds / 60;
int seconds = remainingSeconds % 60;
// 00:00形式で表示
System.out.printf("%02d:%02d%n", minutes, seconds);
//入力の指定
System.out.println("休憩時間を 00:00 形式で入力してください:");
String breakTime = scanner.next();
String[] breakTimeParts = breakTime.split(":");
int breakMinutes = Integer.parseInt(breakTimeParts[0]);
int breakSeconds = Integer.parseInt(breakTimeParts[1]);
int breakTotalSeconds = breakMinutes * 60 + breakSeconds;
まとめ
上記の手順を行いターミナル上でポモドーロタイマーを作成できました。
次回はローカルホスト上で実行できるよう作業していきます!