如何使用Iterator迭代存储自定义类对象的ArrayList中多个元素
问题原因
- 迭代器初始化时机错误:你在类加载阶段就初始化了
Iterator<customer> iterate,此时customers还是空列表,迭代器会绑定初始化时的列表状态,后续往列表中新增的元素无法被这个旧迭代器识别,自然无法遍历到新内容。 - 仅执行了一次添加操作:你的代码中只调用了1次
addCustomer()方法,customers列表本身就只有1个元素,自然只能遍历到单个值。
修复方案
- 删除全局的静态迭代器变量,每次需要遍历的时候再当场生成迭代器,保证迭代器和列表的实际状态同步;也可以直接使用增强for循环简化遍历代码。
- 如果需要添加多个客户,可多次调用
addCustomer()方法,比如增加循环逻辑让用户可连续添加多个客户信息。
修改后的代码示例
Customer类(补充命名规范优化,类名首字母大写)
public class Customer { private String customerName; private String phoneNumber; private String customerId; public Customer(String customerName, String phoneNumber, String customerId) { this.customerName = customerName; this.phoneNumber = phoneNumber; this.customerId = customerId; } public String getCustomerName() { return customerName; } public String getPhoneNumber() { return phoneNumber; } public String getCustomerId() { return customerId; } // 改为静态方法更合理,无需实例即可创建客户对象 public static Customer addCustomer(String customerName,String customerId,String phoneNumber) { return new Customer(customerName, phoneNumber, customerId); } }
Main类
import java.util.ArrayList; import java.util.Iterator; import java.util.Scanner; public class Main { static Scanner scan = new Scanner(System.in); static ArrayList<Customer> customers = new ArrayList<>(); // 已删除全局迭代器变量 static Customer initCustomer = new Customer("dinesh","9600064079","rd_3033"); public static void main(String[] args) { System.out.println("初始客户ID:" + initCustomer.getCustomerId()); // 示例:循环添加2个客户,可按需调整循环次数 for (int i = 0; i < 2; i++) { System.out.println("--- 第" + (i+1) + "个客户信息录入 ---"); addCustomer(); } printCustomer(); } public static void addCustomer(){ System.out.println("enter the customer name : "); String customerName = scan.nextLine(); System.out.println("enter the customer ID : "); String customerId = scan.nextLine(); System.out.println("enter the customerNumber : "); String customerNumber = scan.nextLine(); Customer addCustomer = Customer.addCustomer(customerName,customerId,customerNumber); customers.add(addCustomer); } public static void printCustomer() { // 方式1:每次遍历时新建迭代器 Iterator<Customer> iterate = customers.iterator(); int index = 0; while(iterate.hasNext()){ Customer element = iterate.next(); System.out.println("索引" + index + ":客户ID=" + element.getCustomerId() + ",客户姓名=" + element.getCustomerName() + ",手机号=" + element.getPhoneNumber()); index++; } // 方式2:增强for循环,代码更简洁(可选) /* for (int i = 0; i < customers.size(); i++) { Customer element = customers.get(i); System.out.println("索引" + i + ":客户ID=" + element.getCustomerId() + ",客户姓名=" + element.getCustomerName() + ",手机号=" + element.getPhoneNumber()); } */ } }
内容的提问来源于stack exchange,提问作者Dinesh.r
相关产品推荐
相关产品推荐

