2

プログラミングがよくわからないことをお詫びしますが、今はJavaで実験して学ぼうとしています。将来的にはWebアプリケーションになるデスクトップアプリをプログラムすることで、私は非常に野心的です。そしてもちろん、2つのアプリケーションを相互に同期させたいと思います。

私は想像しています、例えば..タスクリストキーパー。Webアプリケーションの場合、データベースにはMySQLを使用します。ただし、デスクトップアプリでは、データベースにArrayListを使用することを想像しています。(または、クラスの代わりにJava DBを使用する方法はありますか?)

私が現在間違った道を進んでいる場合、私はこれを開発する初期段階にあるので、簡単にコースを変更することができます。しかし、基本的に、私はクラスTaskと、タスクを保持するためのクラスDatabaseを持っています。

MySQLレコードとペアになる一貫したIDを維持しようと考えているので、taskIDを保存しようとしています。私は何かがうまくいくようになりましたが、それが最善の解決策ではないとも思います。誰かが私を別の、より効率的な方向に向けることができるかどうかを見ているだけです。

これまでにコンパイルしたコードは次のとおりです。

import java.util.ArrayList;

public class Todos {

    public static class Database {
        private ArrayList<Task> database = new ArrayList<Task>();
        private int taskCounter = 0;

        /*
        // This above taskCounter is not being incremented inside my
        // addTask method, so I had put the for-loop in there..

        public boolean addTask(Task task)
        {
            boolean addItemSuccessful = false;
            int originalArraySize = database.size();
            taskCounter++;
            database.add(task);
            if (database.size() > originalArraySize)
            {
                addItemSuccessful = true;
            }
            return addItemSuccessful;
        }
        */

        public boolean addTask(Task task)
        {
            boolean addItemSuccessful = false;
            int originalArraySize = database.size();
            int taskID = 0;
            for(int i = 0; i < database.size(); i++) {
                if (database.get(i).taskID > taskID) {
                    taskID = database.get(i).taskID;
                    System.out.println(taskID);
                }
            }
            taskID++;
            task.setTaskID(taskID);
            System.out.println(taskID);
            database.add(task);
            if (database.size() > originalArraySize)
            {
                addItemSuccessful = true;
            }
            return addItemSuccessful;
        }

        public boolean removeTask(int taskID) {
            // This code is actually not correct, here but this is the idea.
            boolean removeItemSuccessful = false;
            int originalArraySize = database.size();
            database.remove(taskID);
            if (database.size() < originalArraySize)
            {
                removeItemSuccessful = true;
            }
            return removeItemSuccessful;
        }

    }

    public static class Task {

        private int taskID;
        private String task;
        private Priority priority = Priority.ZERO;

        public enum Priority { ZERO, MAYBE, LOW, MEDIUM, HIGH, EXTREME }

        public void setTaskID(int taskID) {
            this.taskID = taskID;
        }
        // .. Other Getters and Setters for Task
    }

    public static void main(String[] args) {

        Database database = new Database();
        Task newTask = new Task();

        database.addTask(newTask);  // Add 1st Task, taskID = 1
        database.addTask(newTask);  // Add 2nd Task, taskID = 2
        database.addTask(newTask);  // Add 3rd Task, taskID = 3
        database.removeTask(2);     // Remove Task 2
        database.addTask(newTask);  // Add 4th Task, taskID = 4

    }
}
4

1 に答える 1

0

データベースに新しいエントリを挿入すると、データベースは自動的に自動インクリメント ID を割り当てます (自分の ID を選択することもできると思いますが、そうすべきではありません)。特定の理由がない場合は、 のフィールドに含めないことをお勧めします。Task代わりに、 にアクセスして配置するためのインデックスとして使用するArrayListか、HashMap <Integer, Task>. それ以外の場合は、静的フィールドを作成して自動インクリメンタル ID を生成するか、そのまま続行できます。

于 2013-02-18T20:20:25.327 に答える