初めから動くタイマーを作成するのは難しいと考えました。
そのため以下のように分割して作業を行なった
- ターミナルでシンプルなカウントダウンタイマーを作る
- 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;まとめ
上記の手順を行いターミナル上でポモドーロタイマーを作成できました。
次回はローカルホスト上で実行できるよう作業していきます!