程序丢失Java链接列表指针

时间:2015-01-12 18:00:03

标签: java list pointers linked-list traversal

我遇到问题我花了好几个小时试图修复我的程序。我的链接列表工作,我可以添加对象,并且这些对象在创建时都有先前的指针,但是当我尝试通过按下按钮遍历列表时,指针似乎不起作用。它将转到上一个节点,但随后完全停止工作,没有异常。我真的无法理解什么是错的,但我敢打赌,这是一个非常简单的事情,就像一行代码在错误的地方或其他什么。

引擎类:

public TeamList tl = new TeamList();
public Team[] t = new Team[0];
private int x = 0;

public void createTeams() {
    x++;
    System.out.println("Enter team name:");
    String teamName;
    teamName = GUI.EditTeams.jTextField1.getText();
    t = Arrays.copyOf(t, (t.length + 1)); 
    t[x - 1] = new Team(x, teamName); /
    if (t[x - 1].getTeamNumber() == 1) { 
        tl.addTeam(t[x - 1]); 
        tl.current = t[x - 1];
    } else {
        tl.addTeam(t[x - 1]); 
        t[x - 1].setPrev(t[x - 2]);
        tl.current = t[x - 1];
    }
    printAllTeams(t);
    EditTeams.jTextField1.setText("");
    EditTeams.jTextField3.setText(t[x - 1].getTeamName());
    System.out.println("Team added!");
}

按上一次团队按钮执行的GUI类操作:

    try {
        sm.prevTeam();
    } catch (InterruptedException ex) {
        Logger.getLogger(EditTeams.class.getName()).log(Level.SEVERE, null, ex);
    }


prevTeam():

public void prevTeam() throws InterruptedException {
    if (t.length == 0 || tl.current.getPrev() == null) {
        EditTeams.jTextField3.setText("Error: No more teams available");
        Thread.sleep(2000);
        EditTeams.jTextField3.setText("");
    } else {
        tl.traverse('p', t[x - 1]);
        EditTeams.jTextField3.setText(tl.current.getTeamName());
    }
}

以下是链接列表:

public class TeamList {

public Team head;
public Team current;

public void addTeam(Team newTeam) // Method to add an item
{
    if (head == null) // If the head is null then head becomes the new item
    {
        head = newTeam;
    } else {  // Else the current is the head
        current = head;
        while (current.getNext() != null) // While the next node is not null, set the current node as the next node
        {
            current = current.getNext();
            current.setNext(newTeam); // Once at the end, the current node becomes the new item
        }
    }
}

public void traverse(char nextOrPrev, Team team)
{
    if (nextOrPrev == 'n') {
        current = team.getNext();
    } else if (nextOrPrev == 'p') {
        current = team.getPrev();
    }
    //team.position = current;
    //current. = p;
}

}

很抱歉,如果我做错了什么,我不是StackOverflow专业版,而且我不是编程专家(请不要嘲笑我编码的内容)。我见过有人说要把东西标记为作业帮助。这是功课帮助。非常感谢提前。

2 个答案:

答案 0 :(得分:0)

我看到了几个问题。首先,在将团队添加到Engine类中的Teamlist t1之前,您从未设置过上一个团队。

其次,您正在使用addTeam(newTeam)方法完全重置每个团队的下一个团队。你需要移动线

current.setNext(newTeam);

到你的for循环之外,这样只有在你到达结束时才按照你的说法执行。

第三,当你穿越你的团队时,你根本就没有穿越任何东西。相反,你给它一个前进和后退的字符键,然后将当前设置为输入团队并继续前进。遍历方法通常有一个循环,它从head开始遍历整个列表,并对每个Team执行一些操作。因此,我不确定你的遍历方法应该完成什么。

答案 1 :(得分:0)

我会回答我自己的问题是为了任何看过这个问题的人的目的。问题在于在prevTeam方法中调用遍历方法。

以下一行:

tl.traverse('p', t[x - 1]);

应该是:

tl.traverse('p',tl.current);

基本上,我告诉每次最近加入的球队都要进行交叉,所以如果有两支球队,一次又一次地继续进入球队1,因为球队1是之前的球队t [x-1]。我使用的是最新的数组对象而不是链表。