有 Java 编程相关的问题?

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

arraylist java。util。尝试使用迭代器时发生ConcurrentModificationException错误

我正在编写一个程序,其中我创建了一个ArrayList,我想用迭代器遍历列表:

ArrayList<Person> flightAttendants = new ArrayList<Person>();
Iterator<Person> itr = flightAttendants.iterator();

我正在尝试遍历arraylist的元素:

我还定义了一个toString方法:

while(itr.hasNext())
{
    System.out.println(itr.next());
}

public String toString()
{
    System.out.println("name of the passenger : "+name);
    System.out.println("Age of the passenger : "+age);
    System.out.println("Seat number of the passenger : "+seatNumber);
    return "\n";            
}

每当我尝试运行它时,它都会给我一个错误:java。util。ConcurrentModificationException

这里的错误在哪里

更新:以下是完整代码:

import java.util.*; 
import java.io.*;

class Person
{
    Integer age;
    String name;
    String seatNumber;
    Integer fare;
    int pnr;
    Person()
    {
        try
        {
            BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Enter the name of the passenger");
            name = b.readLine();
            System.out.println("Enter the age of the passenger");
            age = Integer.parseInt(b.readLine());
            System.out.println("Enter the Seat Number you want");
            seatNumber = b.readLine();
            pnr = (int)(Math.random()*100000000);
            System.out.println("PNR number of the passenger is : "+pnr);
        }
        catch(Exception e)
        {
            System.out.println("");         
        }
    }
    public String toString()
    {
        System.out.println("name of the passenger : "+name);
        System.out.println("Age of the passenger : "+age);
        System.out.println("Seat number of the passenger : "+seatNumber);
        return "\n";                
    }
}
class EconomyPassenger extends Person
{

}
class BusinessPassenger extends Person
{

}
class Crew extends Person
{

}
public class Airline
{
    public static void main(String[] args) 
    {
        ArrayList<Person> flightAttendants = new ArrayList<Person>();
        Iterator<Person> itr = flightAttendants.iterator();
        while(true)
        {
            try
            {
                System.out.println("Welcome to Indigo!!!");
                BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
                System.out.println("Enter your Choice");
                System.out.println("1.Book Tickets");
                System.out.println("2.Check Reservation");
                System.out.println("3.Update Tickets");
                System.out.println("4.Exit");
                int choice=Integer.parseInt(b.readLine());
                if(choice<0 || choice>4)
                {
                    throw new InvalidChoiceException("Enter a valid choice between 1 and 4");
                }
                switch(choice)
                {
                    case 1: System.out.println("\n\n1.Economy*******2.Business*******3.Crew Login*******4.Exit");
                    // BufferedReader c = new BufferedReader(new InputStreamReader(System.in));
                    int c = Integer.parseInt(b.readLine());
                    if(c==1)
                    {
                        flightAttendants.add(new EconomyPassenger());
                    }
                    else if(c==2)
                    {
                        flightAttendants.add(new BusinessPassenger());
                    }
                    else if(c==3)
                    {
                        flightAttendants.add(new Crew());
                    }
                    else if(c==4)
                    {
                        break;
                    }
                    break;
                    case 2: // System.out.println("Enter your PNR Number : ");
                    // int p = Integer.parseInt(b.readLine());
                    // System.out.println(p);
                    while(itr.hasNext())
                    {
                        System.out.println(itr.next());
                    }
                    break;
                    case 3: System.out.println("case 3");break;
                    case 4: return;
                    default: System.out.println("default");
                }
            }    
            catch(InvalidChoiceException ic)
            {
                // System.out.println(ic);
            }
            catch(Exception e)
            {
                System.out.println(e);
            }
        }
    }
}
class InvalidChoiceException extends Exception
{
    InvalidChoiceException()
    {}
    InvalidChoiceException(String msg)
    {
        System.out.println(msg);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    你提供的代码应该可以很好地工作,因为我已经尝试过了。除非你表明你的代码正在处理其他问题,否则我们无法进一步尝试解决。我建议您也检查一下问题Iterators and the concurrentmodificationexception,以便更好地理解您的代码可能在某个地方出现了上面提到的错误

    正如Andrew提到的,将迭代器引入while循环,现在就可以正常工作了。我试过了