类Task
描述的是包含变量的业务任务:日期,描述,任务完成所需的总小时数以及任务的所有者。
为所有名为 tasks 的任务创建ArrayList
。问题是任务可以有多个所有者,这意味着创建一个名为owner的变量不会起作用,所以我所做的就是创建了另一个名为TaskOwner
的类并将该类实现为{ {1}}在ArrayList
类中命名 taskOwner 。
现在问题是:您应该能够列出特定所有者的任务:这意味着您需要将所有者与您在键盘上输入的名称进行比较。
问题在于以下几行代码:
Task
我似乎无法访问类System.out.println("What name of owner do you want to list tasks for: ");
String nameOfOwner = keyboard.nextLine();
if (nameOfOwner.toLowerCase().equals(tasks.get(1).getTaskOwner().getName().toLowerCase())) {
System.out.println(tasks.get(1));
}
中名为 name 的变量,即使我已经为所需的一切创建了getter,所以任何人都可以知道我应该如何能够访问这些信息?
我得到的错误信息是:
对于类型ArrayList
,方法getName()未定义
答案 0 :(得分:2)
getTaskOwner
似乎返回ArrayList
类型的对象,而不是TaskOwner
(错误消息指示的内容)。换句话说,它返回一个所有者列表。要调用getName()
方法,您需要遍历此列表,并在与TaskOwner
实例对应的每个元素上调用该方法。
System.out.println("What name of owner do you want to list tasks for: ");
String nameOfOwner = keyboard.nextLine();
for(int i = 0; i < tasks.size(); i++) {
List<TaskOwner> owners = tasks.get(i).getTaskOwner();
for(TaskOwner owner : owners) {
if (nameOfOwner.toLowerCase().equals(owner.getName().toLowerCase())) {
System.out.println(tasks.get(i));
break;
}
}
}
答案 1 :(得分:0)
这将返回一个ArrayList:
tasks.get(1).getTaskOwner();
因此,您需要在其上调用数组列表方法,例如contains(...)
if (tasks.get(1).getTaskOwner().contains(nameOfOwner.toLowerCase())) {
答案 2 :(得分:0)
正如其他答案所指出的,问题是你在getName()
上调用ArrayList<>
而不是在ArrayList中调用对象。这样做的正确方法是遍历所有任务,然后为每个任务循环遍历其所有者。这是一段示例代码,假设所有者名称存储在变量nameOfOwner
:
for(Task task: tasks) {
for(TaskOwner owner: tasks.getTaskOwner) {
if (nameOfOwner.toLowerCase().equals(owner.getName().toLowerCase())) {
System.out.println(task);
break;
}
}
}
如果您还在类TaskOwner
中重载了equals方法以对所有者的名称进行字符串匹配,则可以使用Arraylist.contains()
方法。但是,您需要从用户输入中创建一个TaskOwner
对象。
如果您打算执行任务和所有者查找,则还应考虑使用HashMap
。对于直接查找,这将为您提供比ArrayList<>
更好的性能。