【プログラミングしてみよう14】JavaでシンプルなToDoリスト管理アプリを作ろう

Java

前回はインターフェースと抽象クラスを使ったクラス設計を学びました。 今回は、これまで学んできた内容を総動員して、シンプルなToDoリスト管理アプリを作ります。 Scanner・ArrayList・クラス・switch文・例外処理をすべて組み合わせた、実際に使えるプログラムです。

今回作るもの

今回作るToDoリスト管理アプリは、以下の機能を持ちます。

  • タスクの追加
  • タスクの一覧表示
  • タスクの削除
  • アプリの終了

起動するとメニューが表示され、番号を入力することで各機能を呼び出せます。終了を選ぶまで何度でも操作できる対話型のプログラムです。

サンプルコード(ToDoリスト管理アプリ)

ファイル作成

「Java04」フォルダに Todo.javaTodoApp.java という名前でファイルを作成します

コード入力

Todo.java に以下のコードを入力します。

public class Todo {
    String title;

    Todo(String title) {
        this.title = title;
    }
}

TodoApp.java に以下のコードを入力します。

import java.util.ArrayList;
import java.util.Scanner;

public class TodoApp {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<Todo> todoList = new ArrayList<>();
        String choice = "";

        while (!choice.equals("4")) {
            System.out.println("\n--- ToDoリスト ---");
            System.out.println("1. タスクを追加");
            System.out.println("2. タスクを表示");
            System.out.println("3. タスクを削除");
            System.out.println("4. 終了");
            System.out.print("番号を入力してください:");
            choice = sc.next();

            switch (choice) {
                case "1":
                    System.out.print("タスク名を入力してください:");
                    String title = sc.next();
                    todoList.add(new Todo(title));
                    System.out.println("「" + title + "」を追加しました");
                    break;
                case "2":
                    if (todoList.size() == 0) {
                        System.out.println("タスクはありません");
                    } else {
                        System.out.println("--- タスク一覧 ---");
                        for (int i = 0; i < todoList.size(); i++) {
                            System.out.println((i + 1) + ". " + todoList.get(i).title);
                        }
                    }
                    break;
                case "3":
                    if (todoList.size() == 0) {
                        System.out.println("削除するタスクがありません");
                    } else {
                        System.out.println("--- タスク一覧 ---");
                        for (int i = 0; i < todoList.size(); i++) {
                            System.out.println((i + 1) + ". " + todoList.get(i).title);
                        }
                        System.out.print("削除するタスクの番号を入力してください:");
                        try {
                            int index = Integer.parseInt(sc.next()) - 1;
                            if (index >= 0 && index < todoList.size()) {
                                System.out.println("「" + todoList.get(index).title + "」を削除しました");
                                todoList.remove(index);
                            } else {
                                System.out.println("エラー:正しい番号を入力してください");
                            }
                        } catch (NumberFormatException e) {
                            System.out.println("エラー:数字を入力してください");
                        }
                    }
                    break;
                case "4":
                    System.out.println("アプリを終了します");
                    break;
                default:
                    System.out.println("エラー:1〜4の番号を入力してください");
            }
        }

        sc.close();
    }
}

コンパイル

javac Todo.java TodoApp.java

実行

java TodoApp

次のようにメニューが表示されます。

--- ToDoリスト ---
1. タスクを追加
2. タスクを表示
3. タスクを削除
4. 終了
番号を入力してください:

操作例とその実行結果は次のようになります。

番号を入力してください:1
タスク名を入力してください:買い物
「買い物」を追加しました

番号を入力してください:1
タスク名を入力してください:勉強
「勉強」を追加しました

番号を入力してください:2
--- タスク一覧 ---
1. 買い物
2. 勉強

番号を入力してください:3
--- タスク一覧 ---
1. 買い物
2. 勉強
削除するタスクの番号を入力してください:1
「買い物」を削除しました

番号を入力してください:4
アプリを終了します

コードの解説

Todo.java は、タスクひとつひとつを表すクラスです。title フィールドにタスク名を持ち、Todo(String title) というコンストラクタで初期化しています。コンストラクタとは、new でインスタンスを作る際に自動的に呼ばれる特別なメソッドで、クラス名と同じ名前で定義します。this.title = title;this は「このインスタンス自身」を指し、引数の title と区別するために使っています。

TodoApp.java では、ArrayList<Todo> でタスクの一覧を管理しています。while (!choice.equals("4")) により、「4(終了)」が入力されるまでメニューを繰り返し表示し続けます。文字列同士の比較には == ではなく .equals() を使う点がポイントです。

switch文でメニュー番号ごとの処理を分岐させています。タスク削除の処理では、入力された番号を Integer.parseInt() で整数に変換し、リストの範囲内かどうかを if 文でチェックしています。また、数字以外が入力された場合に備えて try-catchNumberFormatException をキャッチしており、不正な入力があってもプログラムが落ちないようにしています。

このプログラムで使っている要素を振り返ると、Scannerでの入力受け取り・ArrayListでのデータ管理・クラスとコンストラクタ・while文・switch文・try-catchと、これまで学んできたほぼすべての内容が詰まっています。

まとめ

今回のToDoリスト管理アプリは、これまで学んだ要素を組み合わせた実践的なプログラムです。個々の文法をひとつずつ学んでいた段階から、複数の要素を組み合わせて「ひとつのアプリ」として動かす段階へとステップアップできました。今回初めて登場した「コンストラクタ」と「Integer.parseInt()」、そして文字列比較に == ではなく .equals() を使う点も重要なポイントです。ここまで学んだ内容があれば、アイデア次第でさまざまなプログラムを作ることができます。ぜひ機能を追加したり、別のアプリを自分で考えて作ってみてください。

2026/06/23(火) ぱんまる

コメント

タイトルとURLをコピーしました