如何生成一个功能的LinkedList类?

时间:2015-03-25 14:16:49

标签: java oop linked-list

作为赋值的一部分,我必须生成一个名为Registry的LinkedList类。它旨在成为具有界面的简单学生注册系统的一部分。

不幸的是,我确实碰到了一堵墙,并且不知道接下来要做什么,我在这里做什么。 Registry类只是用于管理名为studentList的学生的链接列表。

以下是迄今为止我所做的当前相当不完整的课程。

import java.util.*;

public class Registry 
{
   LinkedList<Student> studentList;

   public Registry()
   {

   }

   public void addStudent(Student aStudent)
   {
      studentList.add(aStudent);
   }

   public void deleteStudent(int studentID)
   {
      studentList.remove(studentID);
   }

   @Override
   public String toString()
   {
      return getClass().getName() + 
   }

   public String format()
   {
      System.out.format(studentList);
   }
}

现在,我主要担心的是使用学生。作为作业的一部分,我不得不创建另一个名为Student的课程,该课程创建学生实例,包含姓氏,姓氏,学生ID和学位计划作为字符串。

我如何能够将该sperate类添加到Registry中实例化的LinkedList中?我怎样才能让Registry类完全运行?

我会根据要求尝试提供任何其他详细信息。我可能不清楚,所以如果我,请告诉我,我会尽力解释。

编辑:这是学生班级的要求:

public class Student 
{
   private String foreName;
   private String surName;
   private String studentID;
   private String degreeScheme;

   public Student()
   {

   }

   public void setForeName(String foreName)
   {
       this.foreName = foreName;
   }

   public String getForeName()
   {
       return foreName;
   }

   public void setSurName(String surName)
   {
       this.surName = surName;
   }

   public String getSurName()
   {
       return surName;
   }

   public void setStudentID(String studentID)
   {
       this.studentID = studentID;
   }

   public String getStudentID()
   {
       return studentID;
   }

   public void setDegreeScheme(String degreeScheme)
   {
       this.degreeScheme = degreeScheme;
   }

   public String getDegreeScheme()
   {
       return degreeScheme;
   }

   @Override
   public String toString()
   {
       return getClass().getName() + "[foreName = " + foreName + " surName "
               + surName + " studentID " + studentID + " degreeScheme " 
               + degreeScheme + "]";
   }

   public void format()
   {
       System.out.format("%5s%20s%11s%20s", foreName, surName, studentID, degreeScheme);
   }
}

2 个答案:

答案 0 :(得分:0)

import java.util.Iterator;
import java.util.LinkedList;

public class Tester {
  public static void main(String[] args) {
    Registry r = new Registry();
    r.addStudent(new Student("13", "John", "Doe", "Physics")); // Add a student to the Registry
    r.addStudent(new Student("212", "Jane", "Bow", "Chem")); // Add another Student
    System.out.println(r); // Print the Student List

    r.deleteStudent(212); // Deletes student with ID 212
    System.out.println(r);
  }
}


class Student {
  private String studentID;
  private String foreName;
  private String surName;
  private String degreeScheme;

  public Student(String studentId, String foreName, String surName, String degreeScheme) {
    this.studentID = studentId;
    this.foreName = foreName;
    this.surName = surName;
    this.degreeScheme = degreeScheme;
  }

  public void setForeName(String foreName) {
    this.foreName = foreName;
  }

  public String getForeName() {
    return foreName;
  }

  public void setSurName(String surName) {
    this.surName = surName;
  }

  public String getSurName() {
    return surName;
  }

  public void setStudentID(String studentID) {
    this.studentID = studentID;
  }

  public String getStudentID() {
    return studentID;
  }

  public void setDegreeScheme(String degreeScheme) {
    this.degreeScheme = degreeScheme;
  }

  public String getDegreeScheme() {
    return degreeScheme;
  }

  @Override
  public String toString() {
    return getClass().getName() + "[foreName = " + foreName + " surName " + surName + " studentID "
        + studentID + " degreeScheme " + degreeScheme + "]";
  }

  public void format() {
    System.out.format("%5s%20s%11s%20s", foreName, surName, studentID, degreeScheme);
  }
}


class Registry {
  LinkedList<Student> studentList;

  public Registry() { // Creates studentList
    studentList = new LinkedList<>();
  }

  public void addStudent(Student aStudent) {
    studentList.add(aStudent);
  }

  public void deleteStudent(int studentID) {
    int index = searchList(studentID); // Gets index of the student in the Registry
    if (index == -1)
      throw new IllegalArgumentException("Student not found");
    // Since studentList is implemented as LinkedList, .remove removes element at specified position
    studentList.remove(index);
  }

  // Search by studentID , if found, return position in the list
  private int searchList(int studentID) {
    Iterator<Student> it = studentList.iterator();
    int count = -1;
    while (it.hasNext()) {
      count++;
      Student temp;
      temp = it.next();
      if (Integer.parseInt(temp.getStudentID()) == studentID) {
        return count;
      }
    }
    return -1;
  }

  @Override
  //Suggestions to improve the toString are welcome
  public String toString() {
    for (Student student : studentList) {
      student.format();
      System.out.println();

    }

    return "";
  }
}

答案 1 :(得分:-2)

在任何数据结构中,有三个函数几乎总是需要实现:

  1. 插入
  2. 搜索
  3. 删除

  4. 首先让我澄清一般链接列表结构的组成部分。 链接列表通过在节点上运行来工作。每个节点都包含您要存储/修改/访问的实际数据。

    • 注册表:这应该负责维护结构并提供插入/搜索/删除列表中特定节点的方法。
    • 学生:存储数据并控制其访问和修改方式

    到目前为止,您已正确创建了 Registry 框架。 (尽管您需要实现搜索方法。)

    对于您的学生班级,您只需创建所需课程的成员变量,以及相应的getter / setter。

    public class Student {
       private String id;
       private String forename;
       private String surname;
       private String degreeScheme;
       private Student next;  // Maintains a reference to the next node in the list
    
       Student () {
        //Default constructor values
       }
    
       Student (String id, String forename, String surname, String degreeScheme, Student next) {
          this.id = id;
          this.forename = forename;
          this.surname  = surname;
          this.degreeScheme = degreeScheme; 
          this.next = next;
       }
    
       public void setID (String id) {
          this.id = id;
       }
    
       public String getID () {
          return id;
       }
    
       public void setforename (String forename) {
          this.forename = forename;
       }
    
       public String getforename () {
          return forename;
       }
    
       public void setSurname(String surname) {
          this.surname = surname;
       }
    
       public String getSurname () {
          return surname;
       }
    
       public void setDegreeScheme(String degreeScheme) {
          this.degreeScheme = degreeScheme;
       }
    
       public String getDegreeScheme () {
          return degreeScheme;
       }
    
       public void setNext (Student next) {
          this.next = next;
       }
    
       public Student getNext () {
          return next;
       }
    } //End Student Class
    

    这应该是一个很好的基础,让你开始。请记住,在创建数据结构时,通过确保明确分离关注点,可以避免很多麻烦。让学生类完全负责存储和维护数据,并让Registry类负责维护结构本身!

    此时,您可以在Registry类中使用Student类,只需根据需要插入节点,搜索它们,根据需要删除它们。