有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java访问类内ArrayList的变量

Task描述企业的任务,其中包括变量:日期、描述、任务完成所需的总小时数,以及任务的所有者

为所有名为任务的任务创建一个ArrayList。问题是一个任务可以有多个所有者,这意味着创建一个名为owner的变量是行不通的,所以我创建了另一个名为TaskOwner的类,并在Task类内将该类实现为一个名为taskOwnerArrayList

现在问题来了:你应该能够列出特定所有者的任务:这意味着你需要将所有者与你在键盘上输入的名称进行比较

问题在于以下几行代码:

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));
}

我似乎无法访问类TaskOwner中名为name的变量,即使我已经为所有需要的内容创建了getter,那么有人知道我应该如何访问这些信息吗

我收到的错误信息是:

The method getName() is undefined for the type ArrayList


共 (3) 个答案

  1. # 1 楼答案

    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;
           }
        }
    }
    
  2. # 2 楼答案

    正如在其他答案中指出的,问题是您在ArrayList<>上调用getName(),而不是在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对象

    如果你的意图是做任务和所有者查找,你也应该考虑使用^ {CD7>}。对于直接查找,这将比ArrayList<>提供更好的性能

  3. # 3 楼答案

    这将返回一个ArrayList:

    tasks.get(1).getTaskOwner();
    

    因此,需要对其调用数组列表方法,例如contains(...)

    if (tasks.get(1).getTaskOwner().contains(nameOfOwner.toLowerCase())) {