java - 我无法在java中访问我的对象的arraylist属性
问题描述
所以我有三个类,Employee、Event 和 Main。我的程序的目的是创建一个事件管理系统,用户可以在其中输入事件的名称以及参加该事件的员工的姓名和 ID。我有一个员工对象和一个事件对象。我的员工对象的属性是字符串名称和整数 ID。我的事件对象的属性是名称和参加该事件的员工对象的 ArrayList。现在的问题是,在我的主要方法中,当我要求用户输入活动名称、活动中的员工人数,然后继续询问参加活动的员工的姓名和 ID 时,问题是在获得用户信息后,当我尝试显示正在参加活动的员工(例如他们的姓名)时,
我遇到的问题来自代码末尾的行,其中打印出我用星号标识的特定活动的与会者。
这是主类的一些代码:
public class Main {
public static void main (String[] args) {
ArrayList<Event> events = new ArrayList<Event>();
ArrayList<Employee> employees = new ArrayList<Employee>();
Event event = null;
Employee employee = null;
Scanner key = new Scanner (System.in);
String name, employeeName, id = "";
int numOfEmployees, attendees = 0;
System.out.print("How many events? ");
numOfEmployees = key.nextInt(); key.nextLine();
for (int i = 0; i < numOfEmployees; i++) {
System.out.println("===========================================");
System.out.print("Enter the name of the event: ");
name = key.nextLine();
System.out.print("How many attendees? ");
attendees = key.nextInt(); key.nextLine();
for (int k = 0; k < attendees; k++) {
System.out.println("----------------------------------------");
System.out.print("Enter the employee name: ");
employeeName = key.nextLine();
System.out.print("Enter the employee IDs of the attendees: "); id = key.nextLine();
int temp = Integer.parseInt(id);
employee = new Employee(employeeName, temp);
System.out.println(employee);
employees.add(employee);
}
System.out.println(employees);
event = new Event(name, employees);
events.add(event);
//event = null;
employees.clear();
}
System.out.println(events.get(1).getName());
**System.out.println(events.get(1).getAttendees());**
key.close();
}
}
如果你想要我的事件类和员工类的代码,我也可以给你,但这里只是两者的构造函数:
事件类的构造函数:
public Event (String name, ArrayList<Employee> employees) {
this.name = name;
this.events.add(name);
this.attendees = employees;
}
员工类的构造函数:
public Employee(String name, int ID) {
this.name = name;
this.ID = ID;
this.employees.add(ID);
}
解决方案
尝试阅读以下内容:Java 是“按引用传递”还是“按值传递”?
创建一个新的 ArrayList 并将其分配给 e 解决了这个问题。
更换
e.clear();
和
e = new ArrayList<Employee>();
应该解决它。(或者您也可以在 Event 构造函数中使用克隆。)
所有事件都指向同一个 ArrayList,所以
e.clear()
清除所有活动的与会者。
推荐阅读
- apache-flink - 为什么 flink 批处理作业将 print()、count() 作为单个作业
- javascript - 我如何能够显示文本并且不会一直未定义此错误
- java - 为什么说我们不需要克隆一个不可变的类?
- linux - if else in ssh pseudo-tty分配给远程服务器怎么办
- laravel - 电子邮件未在使用 SMTP 的共享主机上发送 laravel 5.8
- flutter - 是否可以在 Windows 上进行开发并为 iOS Flutter 导出
- android - 如何在 Android 8+ 上显示通知
- mariadb-10.1 - 'Error:connecting slave requested to start from GTID 0-1-1, which is not in master's binlog
- node.js - 如何在 Nestjs 中实现聊天网关
- sql - SQL 查询不返回所有月份