0

我已经为此工作了几个小时,所以我希望有人可以帮助我。我必须创建一个学生数组列表并执行以下命令。添加、查找和删除学生。无论如何,我的添加,查找功能都可以正常工作,但是当我尝试删除学生时,它会显示错误的学生!我不知道该怎么做感觉就像我已经尝试了一切。

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);
    }
}
4

2 回答 2

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 的新手。

干杯。

于 2013-10-03T06:50:48.377 回答
0

你的Student类是否覆盖了hashCode()andequals()方法?如果不是,它将无法正确处理 Java 集合。

然后您应该能够执行以下操作:

studentList.add(student);
...
int index = studentList.indexOf(student);
if (index != -1) return studentList.get(index);
...
studentList.remove(student);
于 2013-10-03T03:45:48.167 回答