JavaでシンプルToDoアプリを作る

# はじめに
この記事はJavaの基礎知識を学習する目的で作成したToDoアプリに関するクラスやメソッドの解説記事になります。データベースを使用しないため、入力と出力はeclipseのコンソール上で完結しています

## プロジェクトを新規作成する

今回作成するプロジェクトの名前は`ToDoList`とします。以降の操作方法はeclipseを使用する前提で解説をしています。

新規プロジェクトを作成するウィザードを起動して、`Javaプロジェクト`を作成します

![スクリーンショット 2023-09-27 16.31.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2765288/3056c86c-dcb3-d604-4cda-9efbe4193756.png)

## パッケージを作成する

新規作成したプロジェクトへすぐさま`クラス`を記述するJavaファイルを配置することは推奨されていないため、関連するクラスをまとめるためのフォルダ（ディレクトリ）であるパッケージを作成します。

パッケージ名は組織のドメイン名を逆順にしたものになり、例えば
`com.example.myproject`など、プロジェクトや組織内で固定されたパッケージ名を指定します

個人で扱う場合は単純に名前やイニシャルなど、個人のプロジェクトであることが識別されやすい名前を設定します
`myproject` `johndoe.myproject`など


## クラスを作成する

作成したプロジェクトに対して右クリックで新しいクラスを作成します。
今回、クラス名は`ToDoList`とします

![スクリーンショット 2023-09-27 17.19.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2765288/9a14bd9e-4d9a-ab47-1b05-0c56ab4003fe.png)

### クラスを作成する際に
`public static void main(String[] args)`オプションをチェックすると
エントリーポイント（起動点）を記述する手間が省けます

mainメソッドは通常、プログラムの実行フローを制御するために使用されます。プログラムが起動したら、mainメソッド内で必要な初期化処理を行い、アプリケーションのメインロジックを実行します。これにより、プログラムの動作を制御できます。

## メソッドを作成する

クラスの作成が終わったら、`タスクの追加` `削除` `表示`などのToDoアプリに関するメソッドを記述します

```ToDoList.java
package com.example.todolist;

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

public class ToDoList {
    private ArrayList<String> tasks = new ArrayList<>();

    // 可変長のメンバー変数を作る　tasks

    public void addItem(String task) {
        tasks.add(task);

    //　変数に対してタスク（文字列）を追加するメソッドを用意する
    }

    public void removeItem(int index) {
        if (index >= 0 && index < tasks.size()) {
    //　もしも引数が0（タスクの番号）以上かつ、入力された数よりも変数のリスト数の方が大きい場合
            tasks.remove(index);
    // 可変長のメンバー変数であるtasksから入力された番号のタスクを削除する
        } else {
    //　異なる場合、保存されたリストの範囲外として警告メッセージを表示させる
            System.out.println("無効なインデックスです。");
        }
    }

    public void displayItems() {
        System.out.println("ToDoリスト:");
// コンソールにToDoリストを表示させる
        for (int i = 0; i < tasks.size(); i++) {
//　繰り返し処理でtasksに保存されたリスト分の情報を表示させる
            System.out.println(i + 1 + ". " + tasks.get(i));
        }
    }

    public static void main(String[] args) {
        ToDoList todoList = new ToDoList();
    //　インスタンス化することで　ToDoListクラスのメソッドを使用することができる
        Scanner scanner = new Scanner(System.in);
    //　インスタンス化することで　Scannerクラスのメソッドを使用することができる
    // Scannerクラスはユーザーからのテキスト入力を実施するクラスです

        while (true) { //trueを引数に与えると無限ループになります
            System.out.println("操作を選択してください:");
            System.out.println("1. タスクを追加");
            System.out.println("2. タスクを削除");
            System.out.println("3. タスクを表示");
            System.out.println("4. 終了");

            int choice = scanner.nextInt(); //コンソールで整数値の入力処理を実行します
            scanner.nextLine(); // 改行を消費

            switch (choice) {
                case 1:
                    System.out.print("新しいタスクを入力してください: ");
                    String task = scanner.nextLine();
                    //　コンソールの次の行に入力されたテキストを取得します
                    todoList.addItem(task);
                    // ToDoListクラスのaddItemメソッドを実施します
                    //　コンソールで入力したテキストがaddItemの引数になり
                    // tasksのリストに追加されます
                    break;
                    // switch処理を抜けます
                case 2:
                    System.out.print("削除するタスクのインデックスを入力してください: ");
                    int index = scanner.nextInt();
                    // 次の行に入力された整数値を変数に代入します
                    // 整数値以外の情報を入力した場合はアプリが終了（停止）します
                    scanner.nextLine(); // 改行を消費（誤操作防止のため）
                    todoList.removeItem(index - 1);
                    // 配列と同じくリストの番号は　0から数えるため
                    // -1した番号のタスクを削除します
                    break;
                case 3:
                    todoList.displayItems();
                    // ToDoListクラスのdisplayItemsメソッドを実行します
                    // コンソールにToDoリストを繰り返し処理で表示します
                    break;
                case 4:
                    System.out.println("アプリケーションを終了します。");
                    scanner.close();
                    // 入力処理の終了を自死して、リソースの確保や誤操作を防ぎます
                    System.exit(0);
                    //アプリを終了します
                    break;
                default:
                    System.out.println("無効な選択です。もう一度試してください。");
                    //1~4以外の数値を入力した場合の警告メッセージ
            }
        }
    }
}


```

## Javaを実行する

作成したアプリを実行し、コンソールに出力します。出力されたメッセージを操作して、タスクを追加できれば成功です

![スクリーンショット 2023-09-27 17.32.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2765288/ab6d999c-3cc0-5c88-154a-1bf1918c9ba4.png)

![スクリーンショット 2023-09-27 17.34.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2765288/4cc4b968-bb91-9978-ad80-820151c8ff7f.png)


## コードの補足

```java
private ArrayList<String> tasks = new ArrayList<>();

// private　　
//   変数をクラス内でのみアクセス可能であることを示す

// ArrayList
//　　　　　　可変長のリストを提供します。配列のように事前にサイズを指定する必要がありません
//   配列とは異なる概念であり、ArrayListは自動的にサイズを調整してくれます

// <String>　
//　　　　　　文字列を扱うという意味です

// = new ArrayList<>();
// ArrayListオブジェクトを生成し、tasks変数に割り当てています
```