有 Java 编程相关的问题?

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

java试图删除学生,但不断出错

这是我的。java,包括我的主要方法:

package studentapp;

public class Studentapp {
    public static ArrayList<Student> students = new <Student> ArrayList();
    public static ArrayList snumbers = new ArrayList();
    public static Scanner user = new Scanner(System.in);
    public static int sncount = 0;

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
        students.add(new Student("Kevin", "Swim", "AAS", 3.5));
        students.add(new Student("Kyle", "Swim", "AAS", 2.8));
        students.add(new Student("Bob", "Smith", "AAS", 2.8));
        sncount = 1;
        createArraynum();
        createMenu();
}


private static void addastudent(){
    System.out.println("First Name: " );
    String fname = user.next();
    System.out.println("Last Name: ");
    String lname = user.next();
    System.out.println("Major: ");
    String major = user.next();
    System.out.println("GPA: ");
    double gpa = user.nextDouble();
    Student a = new Student (fname,lname,major,gpa);
    students.add(a);
    a.sNumber = 1234500 + sncount;
    snumbers.add(a.sNumber + sncount);
    sncount ++;
    createMenu();

    }
private static void findaStudent(int input){
    if (snumbers.contains(input)) {
        for(Student i : students){
            if(i.sNumber == input)
            {System.out.println(i.sNumber +" "  + i.firstName + " " + i.lastName +
                     " " + i.major + " gpa: " + i.gPA );

            }
            }
    } else {
       System.out.println("Sorry, The Student with that sNumber does not exist!");
} 
    createMenu();
}


private static void deleteaStudent(int input){

    if (snumbers.contains(input)) {
        for(Student i : students){
            if(i.sNumber == input){
                int number = students.indexOf(i);
                students.remove(number);
                System.out.println(i.sNumber +" "+ i.firstName+" "+i.lastName + " has been deleted!");
            }
            else { System.out.println(" ");}
            }
    } else {
       System.out.println("Sorry, We cannot find a student with that number!");

    }
}
private static void displayStudents(){
    for(Student i : students){
        System.out.println(i.sNumber +" "  + i.firstName + " " + i.lastName +
                     " " + i.major + " gpa: " + i.gPA );
    }
    createMenu();
}
private static void displayNumStudent(){
    System.out.println(students.size());
    createMenu();
}
private static void exit(){
    System.out.println("Thank you, Goodbye");
}
private static void createMenu(){

        System.out.println("1. Add a Student");
        System.out.println("2. Find a Student");
        System.out.println("3. Delete a Student");
        System.out.println("4. Display all Students");
        System.out.println("5. Display the total number of students");
        System.out.println("6. Exit");
        System.out.println("Enter your Selection: ");

        int count = user.nextInt();
        switch (count){
            case 1: addastudent();
                 break;
            case 2: System.out.println("Find student with sNumber S");
                    int number = user.nextInt();
                    findaStudent(number);
                 break;
            case 3: System.out.println("Delete student with sNumber S");
                    int number1 = user.nextInt();
                    deleteaStudent(number1);
                 break;
            case 4:  displayStudents();
                 break;
            case 5:  displayNumStudent();
                 break;
            case 6:  exit();
                 break;
            default : System.out.println("Please Make a valid Selection");
                      createMenu();

        }
}
private static void createArraynum(){
    for(Student i : students){
        i.sNumber = 1234500;
        i.sNumber = i.sNumber + sncount;
        snumbers.add(i.sNumber);
        sncount ++;
    }
}

}

这是我的学生班

public class Student {
String firstName;
String lastName;
int sNumber = 1234500;
String major;
double gPA;
int count;


public Student(String fName, String lName, String maj, double gpa){
    firstName = fName;
    lastName = lName;
    major = maj;
    gPA = gpa;


}
public String getFirstName(){
    return this.firstName;
}
public String getLastName(){
    return this.lastName;  
}
public void setFirstName(String name){
    this.firstName = name;

}
public void setLastName(String name){
    this.lastName = name;

}
public int getSNumber(){
    return this.sNumber;    
}
public String getMajor(){
    return this.major;

}
public void setMajor(String smajor){
    this.major = smajor;

}
public double getGpa(){
    return this.gPA;

}
public void setGpa(double num){
    this.gPA = num;

}
@Override
public String toString(){
    return firstName;

}

}

一切似乎都按我希望的方式进行。除非我尝试调用deleteaStudent方法。如果我试图从arrayList students中删除该学生,则会出现错误

错误如下所示:

    Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
    at java.util.ArrayList$Itr.next(ArrayList.java:831)
    at studentapp.Studentapp.deleteaStudent(Studentapp.java:68)
    at studentapp.Studentapp.createMenu(Studentapp.java:115)
    at studentapp.Studentapp.main(Studentapp.java:28)
Java Result: 1

我怎样才能让它正常工作


共 (1) 个答案

  1. # 1 楼答案

    在使用增强的for循环对学生进行迭代时,不能将其从列表中删除。您可以改用显式迭代器

    Iterator<Student> iter = students.iterator();
    while (iter.hasNext() {
        Student student = iter.next();
        if (someCondition)
            iter.remove();
    }
    

    在你的方法中:

    private static void deleteaStudent(int input){
    
        if (snumbers.contains(input)) {
            Iterator<Student> iter = students.iterator();
            while (iter.hasNext() {
                Student i = iter.next ();
                if(i.sNumber == input){
                    iter.remove ();
                    System.out.println(i.sNumber +" "+ i.firstName+" "+i.lastName + " has been deleted!");
                }
                else {
                    System.out.println(" ");
                }
            }
        } else {
           System.out.println("Sorry, We cannot find a student with that number!");
    
        }
    }