はじめに
Teyo3Mです。
エンジニアになるため、現在会社に所属しながら勉強をしています。
前回に引き続き、勉強して学んだことなどを備忘録として記載していきます。
前回の記事はこちら
簡単な自己紹介
名前:Teyo3M
職歴:家庭教師のバイト、塗装職人
趣味:スキューバダイビング
実施していること
初心者がJavaでTodo管理システムを作ってみるガイド!
本記事の発展課題にある「タスクの優先度の設定」、「期限の設定」、「データの永続化」に取り組んでいる。
先入観が招いた学び
私は前回の記事で先入観から失敗しているのにも関わらず、ここでも学習の機会を生みました。
タスクを優先度順に並べ替えをしようと思った際に、勉強中の基本情報が頭をよぎりました。
「並べ替えならアルゴリズムの勉強でやった。バブルソートで終わりなのでは?」
結論からお話すると、sort()メソッドを利用すればハードコーディングはいらなかったです。
↓下記実際に記述したコード
import java.util.List;
public class Sorter {
// Todoリストを優先度の降順にバブルソートするメソッド
public static void sortTodos(List<Todo> todos) {
int n = todos.size();
for (int i = 0; i < n - 1; i++) {
boolean swapped = false; //制御用
for (int j = 0; j < n - i - 1; j++) {
// getPriority() を使用して優先度レベルを取得
if (todos.get(j).getPriority().getLevel() < todos.get(j + 1).getPriority().getLevel()) {
Todo temp = todos.get(j);
todos.set(j, todos.get(j + 1));
todos.set(j + 1, temp);
swapped = true;
}
}
if (!swapped) {
break; // 既に整列済みなら終了
}
}
}
}
エラーハンドリングのむずかしさ
入力を受け付けるコードを書いていた時の話です。
日付を入力する際に、自分で記述したにも関わらず、入力形式に疑問がわいてしまいました。
正しい形式が2025/01/01 の時、2025/1/1と入力した場合はどうなるのか。
答えは簡単でエラーでプログラムが止まってしまいました。
結局どちらもプログラムが受け入れられるような入力をしてもらえるまでループすることで解決しました。
実際に書いたコード
import java.util.Scanner;
public class SelectPriority {
private static final Scanner scanner = new Scanner(System.in); // クラス変数として宣言
public static Priority selecter() {
System.out.println("優先度を選択してください。 (1:低, 2:中, 3:高, 4:やばい)");
while (true) { //エクセプションを使わないエラー処理
String input = scanner.nextLine();
if (input.matches("[1-4]")) { // 正規表現で1〜4のみ許可
return Priority.values()[Integer.parseInt(input) - 1];
}
System.out.println("1から4の数字を入力してください。");
}
}
}
こちらは、正規表現で1~4の数字のみ受け付けるプログラムです。
Todoリストの優先度設定に使用しました。
工夫した箇所として、「ecxeption」を使わないエラーハンドリングに挑戦しました。
まとめ
コーディングに限った話ではないのですが、ゴールを見据えて何かをするのはとても大切だと思いました。
本記事で取り上げた2つのコードもそれぞれ失敗例と成功例をとらえることができると思います。
上のコードは「手段に固執するあまり不要なリソースを使ってしまった」パターン。
下のコードは「目的を達成するために、最小のリソースでコーディングができた」パターン。
勉強を振り返って自分を客観視した時に、「自分は何をしていたのか」と次回の進捗報告時に思わないよう、日々意識していきたいとおもいm