Java 链表插入法

Java 链表插入法,java,list,Java,List,在编写一个演示链表的类的过程中,我没有得到我需要的结果。我编写了一个类,其中包含一个内部节点类以及一个插入方法,该方法向列表中添加一个名称和分数,通过删除分数最低的人将列表限制为10。我还创建了一个测试GUI程序。当运行并键入insert命令时,列表将显示我的类GamerList的名称,后跟@和数字,而不是所需的名称和分数。我怀疑我的问题出在insert方法的某个地方。如有任何反馈,将不胜感激 链表类 class GameList { //node class priva

在编写一个演示链表的类的过程中,我没有得到我需要的结果。我编写了一个类,其中包含一个内部节点类以及一个插入方法,该方法向列表中添加一个名称和分数,通过删除分数最低的人将列表限制为10。我还创建了一个测试GUI程序。当运行并键入insert命令时,列表将显示我的类GamerList的名称,后跟@和数字,而不是所需的名称和分数。我怀疑我的问题出在insert方法的某个地方。如有任何反馈,将不胜感激

链表类

    class GameList
   {
  //node class

  private class Node
  {
    String name;
    int score;
    Node next;

    //Node constructor
    Node(String namVal, int scrVal, Node n)
    {
      name = namVal;
      score = scrVal;
      next = n;
    }

    //Constructor
    Node(String namVal, int scrVal)
    {
      this(namVal, scrVal, null);
    }
  }

  private Node first; //head
  private Node last;  //last element in list

  //Constructor

  public GameList()
  {
    first = null;
    last = null;
  }

  //isEmpty method: checks if param first is empty
  public boolean isEmpty()
  {
    return first == null;
  }

  public int size()
  {
    int count = 0;
    Node p = first;

    while(p != null)
    {
      count++;
      p = p.next;
    }
    return count;
  }

 //Override toString
public String toString()
{
  StringBuilder strBuilder = new StringBuilder();

  // Use p to walk down the linked list
  Node p = first;
  while (p != null)
  {
     strBuilder.append(p.name); 
     p = p.next;
  }      
  return strBuilder.toString(); 
}



  public void insert(String name, int score)
  {
    Node node = new Node(name, score);
    final int MAX_LIST_LEN = 10;

    if(isEmpty())
    {
      first = node;
      first.next = last;
    }

    else if(first.score <= node.score)
    {
      node.next = first;
      first = node;
    }

    else
    {
      Node frontNode = first;
      while(frontNode.score > node.score && frontNode.next != null) 
      {
                frontNode = frontNode.next;
      }
      node.next = frontNode.next;
      frontNode.next = node;
    }

    if(size() > MAX_LIST_LEN)
    {
      Node player = first;
      for(int i = 0; i < 9; i++)
      {
        player = player.next;
      }
      player.next = null;
    }
  }
}

不,在这个特定的例子中的问题,我没有检查你的列表是否真的做了它应该做的事情,因为你没有为你的链表类定义toString方法,所以它使用在object中定义的默认toString,它会打印类名和内存位置。

不,这个特定例子中的问题,我没有检查您的列表是否真正起作用,因为您没有为链接列表类定义toString方法,所以它使用在object中定义的默认toString,它会打印类名和内存位置。

我想您在某处遇到过这样的调用:

topGamers.toString()
除非重写,否则toString将打印出对象的类型和哈希代码。对于我们这些不关心对象类型和散列代码作为可打印表示的人来说,这两种方法都是完全无用的

你要做的是实现一个健全的字符串表示你的游戏列表

嗯…有一点需要注意-游戏列表只保存节点,所以你也必须从每个节点中提取信息。这意味着,对于Node,您也覆盖了toString


我将这一部分作为练习留给读者,让读者浏览列表,但您最好在StringBuilder中收集每个节点的信息,然后返回其toString值。

我想您在某处遇到过这样的调用:

topGamers.toString()
除非重写,否则toString将打印出对象的类型和哈希代码。对于我们这些不关心对象类型和散列代码作为可打印表示的人来说,这两种方法都是完全无用的

你要做的是实现一个健全的字符串表示你的游戏列表

嗯…有一点需要注意-游戏列表只保存节点,所以你也必须从每个节点中提取信息。这意味着,对于Node,您也覆盖了toString


我把这一部分留给读者作为一个练习,让读者浏览列表,但是你最好在StringBuilder中收集每个节点的信息,然后返回它的toString值。

哇,你们都非常有知识,对我们这些刚刚开始做这件事的人来说都有巨大的启发!因为我的教授还没有涉及到这个主题,所以我将在早上的第一件事上开始阅读StringBuilder课程。@Makoto我创建了一个toString方法,它可以很好地进行编辑和编译,这对我来说是一个巨大的成就。但是,我没有返回哈希代码和对象类型,而是得到一个空值。我还注意到,pack正在相应地调整GUI大小,尽管文本不可见。如果您对此有任何见解,我们将不胜感激。非常感谢。哇,你们两个都非常博学,对我们这些刚开始从事这项工作的人来说都是巨大的灵感!因为我的教授还没有涉及到这个主题,所以我将在早上的第一件事上开始阅读StringBuilder课程。@Makoto我创建了一个toString方法,它可以很好地进行编辑和编译,这对我来说是一个巨大的成就。但是,我没有返回哈希代码和对象类型,而是得到一个空值。我还注意到,pack正在相应地调整GUI大小,尽管文本不可见。如果您对此有任何见解,我们将不胜感激。非常感谢。
@Override
public String toString() {
    // code
}