我已经设置了一个赋值,以链接列表的形式创建一个用Java编写的基于寄存器的小程序。我首先创建了一个学生类,然后是该类的测试文件。接下来,在注册表文件中,我已经设置了我的方法和构造函数,并且正在编写测试文件以测试我的所有方法。
但是,当我尝试从我的链接列表中删除特定元素时遇到问题,我希望能够删除学生,通过他们的个人学生ID引用他们,但我不知道该怎么做。
在尝试解决问题的同时,我遇到了removeFirstOccurrence(Object o)
方法。这是正确的使用方法吗?
非常感谢任何帮助。
学生档案代码:
public class Student {
private String foreName;
private String surName;
private int studentID;
//declaring the variables needed for my student
public Student (String foreName, String surName, int studentID)
{
this.foreName = foreName;
this.surName = surName;
this.studentID = studentID;
}
//constructor to set out what a student needs
public String getForeName() {
return foreName;
}
public String getSurName() {
return surName;
}
public int getStudentID() {
return studentID;
}
public void setForeName(String foreName) {
this.foreName = foreName;
}
public void setSurName(String surName) {
this.surName = surName;
}
public void setStudentID(int studentID) {
this.studentID = studentID;
}
// getters and setters for my variables
public String toString ()
{
return getClass().getName() + "foreName = " + foreName + "surName = " + surName + "studentID = " + studentID;
}
//my toString method
}
注册管理机构代码:
import java.util.*;
public class Registry {
LinkedList<String> studentList
= new LinkedList<String>();
//setting my type parameter
public Registry() {}
//empty constructor to hold arguements
public void addStudent(String aStudent)
{
this.studentList.addLast(aStudent);
}
public void deleteStudent(int studentID)
{
//????
}
@Override public String toString()
{
return "Registry";
}
public String format()
{
}
REGISTRY TESTER文件代码:
import java.util.*;
public class RegistryTester {
public static void main (String[] args)
{
LinkedList<String> studentList
= new LinkedList<String>();
System.out.println("Test 1");
System.out.println("Methods tested: addStudent, constructor");
System.out.println("********************");
studentList.add("Joe Perkins 123");
studentList.addLast("Shilpa Gupta 1234");
studentList.addLast("Seany Ray 12345");
// adding 3 students to my list
System.out.println(studentList);
}
}
答案 0 :(得分:1)
将List
定义为List
的{{1}}
Student
覆盖LinkedList<Student> studentList = new LinkedList<Student>();
课程中的hashCode()
和equals()
方法。
Student
定义方法:
public boolean equals(Object obj) {
if (obj instanceof Student) {
return studentID == ((Student)obj).getStudentID();
}
return false;
}
public int hashCode() {
return studentID;
}
答案 1 :(得分:1)
首先,您应该为LinkedList
类型设置Student
:
LinkedList<Student>
然后要删除学生,您可以:
浏览列表,找出具有相同ID的学生对象,将其删除
覆盖equals() and hashcode()
课程中的Student
方法,然后
public void deleteStudent(int studentID)
{
//getStudent object (stu) By the given ID
studentList.remove(stu);
}
使用Map
,(HashMap
或LinkedHashMap
)代替LinkedList
,key是studentId,value是studentObject。这将使添加/删除更容易。
答案 2 :(得分:0)
如果您有Collection
(在您的情况下是LinkedList
)Student
并且在其上调用remove(studentToRemove)
,则Java会将每个对象与{{1}进行比较使用其studentToRemove
方法。
在您的情况下,您尚未编写equals()
方法,因此使用equals()
方法。如果学生确实通过其Object
唯一标识(即,两个studentId
个实例,且Student
始终是同一个学生),则应覆盖studentId
metod和使用该字段检查是否相等。
另一种方法是迭代列表,直到找到匹配项,然后从列表中删除该学生。