2013-10-03 3 views
0

Я работаю над этим часами, поэтому надеюсь, что кто-то может мне помочь. Я должен создать arraylist студентов и сделать следующие команды. добавлять, находить и удалять учащихся. В любом случае, мои функции add, find работают нормально, но когда я пытаюсь удалить студентов, это приводит к неправильному ученику! Я не знаю, что делать, как будто я все пробовал.ArrayList и методы для java

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

Теперь, когда вы упомянули об этом, почему вы возвращаете 'String' в метод' find' вместо объекта 'Student'? –

ответ

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; 

} 

Извините за любые ошибки или проблемы с моим ответом, я новичок в Stack Overflow.

Cheers.

Смежные вопросы