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