2013-10-03 135 views
0

我一直在这个小时工作,所以我希望有人能帮助我。我必须创建一个学生的数组列表并执行以下命令。添加,查找和删除学生。无论如何,我的添加,查找功能工作正常,但是当我试图删除学生时,它带来了错误的学生!我不知道该做什么感觉就像我尝试了一切。java的ArrayList和方法

public void addStudent(String studentName, long studentID, String address) { 
    Student newStudent = new Student (studentName, studentID, address); 
    collegeList.add(newStudent); 
} 

public static void deleteStudent() { 
    Scanner input=new Scanner(System.in); 
    System.out.print("Enter student ID"); 
    long studentNumber=input.nextLong(); 

    if(directory.isValidID(studentNumber) && directory. withinRange(studentNumber)) { 
     System.out.print("Deleting Student"); 
     System.out.print(directory.findStudent(studentNumber)); 
     System.out.print("please confirm with y/n"); 
     Scanner myans=new Scanner(System.in); 
     String confirmation=myans.next(); 

     if (confirmation.equals("y")) { 
      directory.deleteStudent(studentNumber); 
      System.out.print("student deleted"); 
     } 

     if(confirmation.equals("n")) { 
      System.exit(0); 
     } 
    } 
} 

/** 
Searches for student based upon their student number 
@param studentID unique student number for each student 
@return students entire information 
*/ 
public String findStudent(long studentID) { 
    String str; 
    Student newStu; 

    for (int i=0; i<collegeList.size(); i++) { 
     newStu=collegeList.get(i); 

     if(newStu.getStudentID()==studentID); 

      return newStu.toString(); 
    } 

    return null; 
} 

/** 
Removing student from collegeList 
@param studentID unique student number 
@return none 
*/ 
public void deleteStudent (long studentID) { 
    Student newStu; 
    for (int i=0; i<collegeList.size(); i++) { 
     newStu=collegeList.get(i); 

     if (newStu.getStudentID()==studentID) 
      collegeList.remove(i); 
    } 
} 
+0

使用迭代器而不是'List#remove'。 –

+0

我的findstudent方法实际上是不正确的,它找不到合适的学生... – user2809437

+0

现在你提到它了,为什么你要在'find'方法而不是'Student'对象中返回一个'String'? –

回答

0

Student类覆盖hashCode()equals()方法呢?否则,Java集合将无法正常运行。

那么你应该能够做这样的事情:

studentList.add(student); 
... 
int index = studentList.indexOf(student); 
if (index != -1) return studentList.get(index); 
... 
studentList.remove(student); 
3

请纠正我,如果我错了,但它看起来像你的比较是错误的。如果你找到了一个较低的分数,那么它会更新最高(与你想要的完全相反)。

highest>newStu.getQuizScore() 

也许应该

highest<newStu.getQuizScore() 

您还需要遍历整个列表中找到的最高得分。现在,您返回的第一个分数低于第一个分数,但这可能不正确。我会做这样的事情:

public Student findHighest() { 

    Student highest; 
    highest=collegeList.get(0); 


    for (int i=1; i<collegeList.size(); i++) { 

     Student newStu=collegeList.get(i); 

     if (highest.getQuizScore()<newStu.getQuizScore()){ 
      highest=newStu; 
     } 

    } 
    return highest; 

} 

对不起,我的答案有任何错误或问题,我是新的堆栈溢出。

干杯。