Uncategorized

ポモドーロタイマーの作成

初めから動くタイマーを作成するのは難しいと考えました。
そのため以下のように分割して作業を行なった

  1. ターミナルでシンプルなカウントダウンタイマーを作る
  2. 1秒ごとにカウントダウンを表示する
  3. 集中時間と休憩時間を設定できるポモドーロタイマーを作る
  4. タイマーの表示を「分:秒」形式にする

ステップ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;

まとめ

上記の手順を行いターミナル上でポモドーロタイマーを作成できました。
次回はローカルホスト上で実行できるよう作業していきます!

-Uncategorized