java.util.ConcurrentModificationException尝试使用迭代器时出错

时间:2018-10-03 12:40:07

标签: java arraylist iterator tostring

我正在编写一个创建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 个答案:

答案 0 :(得分:0)

您提供的代码应该可以正常工作,因为我已经尝试过了。除非您表明还有其他问题,否则您的代码仍在工作,我们无法进一步尝试解决。我建议您也检查问题Iterators and the concurrentmodificationexception,以更好地了解您的代码可能会陷入此处提到的错误中。

正如安德鲁(Andrew)所述,将迭代器带入while循环,现在可以正常检查了。我试过了。