从arraylist中删除特定对象

时间:2015-07-20 00:38:48

标签: java object arraylist

我需要帮助从arraylist中删除特定对象。我正在为每个对象创建具有唯一ID和等级的对象。我尝试使用此唯一ID从arraylist中删除对象,但我无法弄清楚为什么我的代码不是工作。我有我的主要Driver类,超类和子类。

子类是从中传递对象信息并扩展超类的位置。我认为,因为子类被扩展了,所以可以从那里定义它。

正在发生的问题是超类的第49行。 Eclipse说getStudentID没有在类中定义。

我正在尝试修改我的教师提供的代码,以便找到arraylist中的对象具有的唯一ID。我相信我做的一切都正确,但方法" locationPerson"似乎没有看到子类中的getStudentID()方法。

这是代码。任何帮助将不胜感激!

子类

public class StudentEnrollee extends ClassSection{
    private int grade;
    private String studentID;

    StudentEnrollee() {
        setStudentID("000-000");
        setGrade(0);
    }

    StudentEnrollee(String ID, int theGrade) {
        setStudentID(ID);
        setGrade(0);
    }

//STUDENT ID    
    public String getStudentID() {
        return studentID;
    }

    public void setStudentID(String theStudentID) {
        this.studentID = theStudentID;
    }
//STUDENT GRADE 
    public int getGrade() {
        return grade;
    }

    public void setGrade(int studentGrade) {
        this.grade = studentGrade;
    }

    public String toString() {

        return("Student ID   : " + studentID + "\n" +
               "Student Grade: " + grade);

    }


}

超类

import java.util.ArrayList;
import java.util.List;


public class ClassSection {

  private int crn, courseNumber, capacity, enrollment, ID, student;
  private String departmentCode, courseMode, meetingDay, meetingTime;
  //CONSTRUCTOR 
  ClassSection() {
    setCrn(0);
    setDepartmentCode("");
    setCourseNumber(0);
    setCourseMode("");
    setMeetingDay("");
    setMeetingTime("");
    setCapacity(0);
    setEnrollment(0);
    setID(0);

  }

  ClassSection(int crn, String departmentCode, int courseNumber, String courseMode, String meetingDay, String meetingTime, int capacity, int enrollment, int ID) {
    setCrn(crn);
    setDepartmentCode(departmentCode);
    setCourseNumber(courseNumber);
    setCourseMode(courseMode);
    setMeetingDay(meetingDay);
    setMeetingTime(meetingTime);
    setCapacity(capacity);
    setEnrollment(enrollment);
    setID(ID);
  }

  //STUDENT ENROLL ARRAY
  List < StudentEnrollee > studentList = new ArrayList < StudentEnrollee > ();

  public int getStudent() {
    return student;
  }
  public void addStudent(StudentEnrollee studentObject) {
      studentList.add(studentObject);
    }
    //LOCATING PERSON
  public ClassSection locatePerson(String getStudentID) {
    for (ClassSection personObject: studentList) {
      if (personObject.getStudentID().equals(getStudentID)) {
        return personObject;
      }
    }

    return null;
  }



  //Delete person
  public void deletePerson(String studentID) {
    ClassSection personObject = locatePerson(studentID); // we'll use our locatePerson method find the index of a Person with a given socSecNum.

    if (personObject != null) studentList.remove(personObject); // if element i contains the target SSN, remove it.

  }

  //DISPLAY LIST OF ENROLLEE    
  public void displayListV1() {
    for (int i = 0; i < studentList.size(); i++) // the old way
    {
      System.out.println(studentList.get(i) + "\n");
    }
  }

  //CRN 
  public int getCrn() {
    return crn;
  }

  void setCrn(int classCrn) {
      this.crn = classCrn;
    }
    //DEPARTMENT CODE
  public String getDepartmentCode() {
    return departmentCode;
  }

  void setDepartmentCode(String classDepartmentCode) {
      this.departmentCode = classDepartmentCode;
    }
    //COURSE NUMBER 
  public int getCourseNumber() {
    return courseNumber;
  }

  void setCourseNumber(int classCourseNumber) {
      this.courseNumber = classCourseNumber;
    }
    //COURSE LOCATION
  public String getCourseMode() {
    return courseMode;
  }

  public void setCourseMode(String classCourseMode) {
      this.courseMode = classCourseMode;
    }
    //MEETING DAY
  public String getMeetingDay() {
    return meetingDay;
  }

  public void setMeetingDay(String classMeetingDay) {
      this.meetingDay = classMeetingDay;
    }
    //MEETING TIMES
  public String getMeetingTime() {
    return meetingTime;
  }

  public void setMeetingTime(String classMeetingTime) {
      this.meetingTime = classMeetingTime;
    }
    //CAPACITY
  public int getCapacity() {
    return capacity;
  }

  public void setCapacity(int classCapacity) {
      this.capacity = classCapacity;
    }
    //ENROLLMENT
  public int getEnrollment() {
    return enrollment;
  }

  public void setEnrollment(int classEnrollment) {
      this.enrollment = classEnrollment;
    }
    //INSTRUCTOR ID
  public int getID() {
    return ID;
  }

  public void setID(int instructorID) {
      this.ID = instructorID;
    }
    //TO STRING METHOD  
  public String toString() {

    return ("CRN                :" + crn + "\n" +
      "Department         :" + departmentCode + "\n" +
      "Course Number      :" + courseNumber + "\n" +
      "Instructional mode :" + courseMode + "\n" +
      "Meeting days       :" + meetingDay + "\n" +
      "Meeting times      :" + meetingTime + "\n" +
      "Capacity           :" + capacity + "\n" +
      "Enrollment         :" + enrollment + "\n" +
      "Instructor’s ID    :" + ID + "\n");

  }
}

驱动程序

public class ClassDriver {

  public static void main(String[] args) {

    ClassSection firstInstance = new ClassSection(20008, "CHM", 000, "Online", "N/A", "N/A", 30, 21, 231);
    ClassSection secondInstance = new ClassSection();
    ClassSection addToList = new ClassSection();

    StudentEnrollee studentObj1 = new StudentEnrollee();
    StudentEnrollee studentObj2 = new StudentEnrollee();
    StudentEnrollee studentObj3 = new StudentEnrollee();

    studentObj1.setGrade(5);
    studentObj1.setID(230);

    studentObj2.setGrade(76);
    studentObj2.setID(45);

    studentObj3.setGrade(2);
    studentObj3.setID(34);


    addToList.addStudent(studentObj1);
    addToList.addStudent(studentObj2);
    addToList.addStudent(studentObj3);

    addToList.deletePerson("45");


    addToList.displayListV1();

    System.out.println(firstInstance.toString());



    System.out.println(secondInstance.toString());


  }

}

2 个答案:

答案 0 :(得分:1)

我认为应该是:

public StudentEnrollee locatePerson(String getStudentID) {
    for (StudentEnrollee personObject: studentList) {
        if (personObject.getStudentID().equals(getStudentID)) {
            return personObject;
        }
    }
    return null;
}

您正在尝试使用超类中子类的方法,因此您得到了未定义此方法的错误。您可以在子类中使用超类的所有方法,但它不能以其他方式工作。

答案 1 :(得分:1)

getStudentID()方法在类StudentEnrollee中声明。在下面的代码中,personObject(定义为ClassSection对象)无法访问它。

public ClassSection locatePerson(String getStudentID) {
    for (ClassSection personObject: studentList) {
        if (personObject.getStudentID().equals(getStudentID)) {
            return personObject;
        }
    }
    return null;
}

解决方案可能因您的程序逻辑而异,但直接的方法是将ClassSection替换为StudentEnrollee

public StudentEnrollee locatePerson(String getStudentID) {
    for (StudentEnrollee personObject: studentList) {
        if (personObject.getStudentID().equals(getStudentID)) {
            return personObject;
        }
    }
    return null;
}