通过方法添加到Hashmap(Java)

时间:2018-04-15 16:54:53

标签: java methods hashmap

所以这里。我有两个课程......

  • “发生了什么事”

引用具有任务实例变量的任务类
TaskId是一个静态int,它将引用map键并设置为1

  • “任务”类 实例变量都是字符串,是名称,日期和时间

我想添加一个方法addTask,它接受3个参数,并通过发生的事情类添加一个任务。每次添加一个任务时,任务ID都应该增加1.这是我到目前为止所拥有的......

public void addTask(String aName, String aDate, String aTime)
{
Map<Integer, Task> tasks = new HashMap<>();
Task newtask = Task (aName,aDate, aTime);
tasks.put(TaskId,newtask);
TaskId = TaskId +1;  
}

但是,当我创建Whats发生的实例(称为whatshappening)并尝试通过该方法添加任务时,例如 whatshappening.addTask(“将猫带到兽医”,“010117”,“1400 “);

始终无法将任务添加到地图中!

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

tasks是仅在方法调用期间存在的变量。可能您需要将新的task放在全局或外部地图中。

答案 1 :(得分:0)

您只是创建一个Task (aName, aDate, aTime)的对象,在此方法结束后将不会保留该对象。 请尝试以下方法: Task newTask = Task (aName, aDate, aTime) 您必须使用动态分配才能“允许”您的任务超出您的方法范围。

答案 2 :(得分:0)

如果这是您的整个代码,那么原因很明显:

在堆栈上分配Map<Integer,Task> task = new HashMap<>();。对于我能想到的大多数语言的内存分配规则,可以追溯到50年前,在退出函数时,地图会被释放,就像它的所有内容一样。

尝试:

public class Thing {
private static Integer TaskId = 0;
public static void main(String .. args) {

     Map<Ineger,Task> tasks = addTask("myName", LocalDate.now()+"", LocalTime.now()+"")
     System.out.println(tasks);
}

private static Map<Integer,Task> addTask(String name, String date, String time) {
    Map<Integer, Task> tasks = new HashMap<>();
    Task newtask = Task (aName,aDate, aTime);
    tasks.put(TaskId,newtask);
    TaskId = TaskId +1; 
    return tasks; // crucial
}
}

这对你有用。

一些好的编程建议:

  1. 除非你,否则你真的也不应该接受字符串的日期/时间 必须。
  2. 使用它们要困难得多
  3. 将您的静态任务ID放入 任务类本身以及在实例化任务时 构造函数赋值this.id = TaskId++