2015-07-20 104 views
-1

我需要幫助從陣列列表中刪除特定對象。我爲每個對象創建具有唯一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()); 


    } 

} 
+4

這是一個很大的代碼,您已發佈。如果僅發佈代碼的相關部分,則可能更有可能獲得幫助。此外,如果您明確指出哪一行是*「超類的第49行」,則會有所幫助,因爲您的帖子不包含行號。 – EJK

+0

您可能會考慮使用HashSet ,其中String是您的唯一ID,而對象實例是YourObjectType – Constantin

回答

1

我覺得應該是:

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

您試圖在超類的使用方法從子類,所以你得到了這個方法沒有定義的錯誤。你可以在子類中使用超類的所有方法,但它不能以另一種方式工作。

+0

已經爲我修復了!非常感謝你,我花了大約一個小時試圖找出它有什麼問題,非常感謝! – MKatana

1

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