You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Iterator迭代存储自定义类对象的ArrayList中多个元素

问题原因
  • 迭代器初始化时机错误:你在类加载阶段就初始化了Iterator<customer> iterate,此时customers还是空列表,迭代器会绑定初始化时的列表状态,后续往列表中新增的元素无法被这个旧迭代器识别,自然无法遍历到新内容。
  • 仅执行了一次添加操作:你的代码中只调用了1次addCustomer()方法,customers列表本身就只有1个元素,自然只能遍历到单个值。
修复方案
  1. 删除全局的静态迭代器变量,每次需要遍历的时候再当场生成迭代器,保证迭代器和列表的实际状态同步;也可以直接使用增强for循环简化遍历代码。
  2. 如果需要添加多个客户,可多次调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:57:04