みなさんこんにちは、一星零哉です。
今回作成、解説していくのはJavaで実装する「タイマー」アプリです。
コンソールに入力された時間分だけ計測するカウントダウンタイマーになります。
さっそく作っていきましょう!
要件と設計
このアプリケーションの要件は「標準入力に入力された時間分、カウントダウンで時間を計測し、残り時間を標準出力する」ことです。
ざっくりと処理の流れを見ていきましょう。
- アプリ実行
- 計測したい時間を入力する旨のメッセージを表示する
- ユーザが入力する
- 入力値をチェックして、数字以外が入力されていたらメッセージを標準出力して処理を終了する
- 入力値をカウンタ変数の初期値として減算ループを回す。
- カウンタ変数を残り時間として標準出力する
- 処理を1秒間止める
- カウンタ変数から1を引く
- カウンタ変数が0になったらループを抜ける
- タイマーが終了した旨のメッセージを標準出力する
- アプリ終了
以上です!
簡単に図にするとこんな感じです。

実装
まずは以下のように実装してみました。
ちなみにJavaのバージョンはJavaSE-21です。
import java.util.Scanner;
public class exeTimer {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
Scanner scanner = new Scanner(System.in);
String tmpSetTime;
try {
System.out.println("時間を秒単位で設定してください。");
tmpSetTime = scanner.nextLine();
// 数字以外が入力された場合、処理を終了する
for(int i = 0; i < tmpSetTime.length(); i++) {
if(!Character.isDigit(tmpSetTime.charAt(i))) {
System.out.println("数字を入力してください。");
return;
}
}
} finally {
scanner.close();
}
try {
int setTime = Integer.parseInt(tmpSetTime);
String srtMsg = "%s秒でタイマーを開始します。";
System.out.println(String.format(srtMsg, setTime));
for(int i = setTime; i > 0; i--) {
System.out.println(String.format("%s秒", i));
Thread.sleep(1000);
}
System.out.println("0秒");
System.out.println("タイマーが終了しました。");
} catch(InterruptedException e) {
System.out.println("スレッドスリープでエラーが発生しました。");
}
}
}
今回も50ステップ程度のクラス1つのアプリケーションになりました。
GitHubはこちらから
実行
このアプリケーションを実行したときの挙動を確認しましょう。
アプリケーションを実行すると、以下のメッセージが標準出力されます。

計測したい時間を入力してEnterを押下すると。。。


カウントダウンが表示されます!キャプチャだけでは伝わらないですが、「秒」と「秒」の出力には1秒間の間隔があります。
数字以外を入力したら、アラートのメッセージが表示されて処理が終了します。

次回
次回からはこのプログラムの解説をしていきます。
ここまでお読みいただきありがとうございました!
この記事を閉じる前に、XとInstagramのフォローもよろしくお願いします!
また次の記事でお会いしましょう!
コメント