从阵列列表中删除特定对象

问题描述:

我需要帮助从阵列列表中删除特定对象。我为每个对象创建具有唯一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 cla*acity) { 
     this.capacity = cla*acity; 
    } 
    //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()); 


    } 

} 
+4

这是一个很大的代码,您已发布。如果仅发布代码的相关部分,则可能更有可能获得帮助。此外,如果您明确指出哪一行是*“超类的第49行”,则会有所帮助,因为您的帖子不包含行号。 – EJK

+0

您可能会考虑使用HashSet ,其中String是您的唯一ID,而对象实例是YourObjectType – Constantin

我觉得应该是:

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

您试图在超类的使用方法从子类,所以你得到了这个方法没有定义的错误。你可以在子类中使用超类的所有方法,但它不能以另一种方式工作。

+0

已经为我修复了!非常感谢你,我花了大约一个小时试图找出它有什么问题,非常感谢! – MKatana

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

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

该解决方案可基于程序逻辑,但简单的方法是更换ClassSectionStudentEnrollee

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

谢谢,它为我修好了! – MKatana