Java链表唯一关键字排序



我试图读取一个文件(在这种情况下与歌词的文本文件),并创建一个链表,只使用唯一的字符串从说的文件。列表中不能有任何两个相同的字符串。它需要存储在链表中,不能使用内置的链表。现在是这样的:

public String createSuperList(String newKey) {
    SuperLink newSuperLink = new SuperLink(newKey);
    SuperLink current = first;
    if(isEmpty()) {
        incertLast(newKey);
    } else if (newSuperLink != last) {
        while(current != newSuperLink && current != null){
            if(current.equals(newSuperLink)){
                return null;
            } else {
                incertLast(newKey);
            }
            current = current.next;
        }
    } else {
        return null;
    }
    return newKey;
}
HOW THE NEWKEY IS SENT TO THIS METHOD:
    File file = new File("MYFILEPATH");
    try {
        Scanner sc = new Scanner(new FileInputStream(file));
        while (sc.hasNextLine()) {
            content = sc.next();
            if(SuperList.createSuperList(content) == null){
                BabyList.incertLast(content);
            }
        }
        sc.close();
    } catch (FileNotFoundException fnf) {
        fnf.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("nProgram terminated Safely...");
    }

newKey是我与链表的其余部分进行比较的字符串,以查看它是否在列表的任何地方重复,如果它在列表的某个地方出现,它将返回null

我现在的问题是它一直在继续,没有停止(失控),它根本没有结束。程序不会停止。I一直循环下去。我让它运行了一个小时,没有任何变化,它还在运行。

现在它应该做的是创建一个名为superLinkList的LinkedList,其中只有唯一的单词。

这是将是一个马尔可夫文本生成器,它使用两个链表。

EDIT_1:所以我修复了无限的运行时间问题,但它仍然没有检查它是否唯一。

更新代码:

public Boolean createSuperList(String newKey) {
    SuperLink newSuperLink = new SuperLink(newKey);
    SuperLink current = first;
    boolean i;
    if(isEmpty()){
        incertLast(newSuperLink.toString());
    }       
    while(current != newSuperLink && current != null){
        if(current.equals(newSuperLink)){
            System.out.println("Not unique Item");
            i = false;
        } else {
            System.out.println("Unique Item");
            i = true;
        }
        current = current.next;
    } 
    if(i = true){
        return true;
    }else{
        return false;
    }
}

EDIT_2:

现在是nullpointerexception。NPE在while循环中。特别是它的current.keyWord。我不知道如何改变这一点,使它将工作。我不知道为什么它抛出一个错误在这里....

代码:

public Boolean createSuperList(String newKey) {
    SuperLink newSuperLink2 = new SuperLink(newKey);
    SuperLink current = first;
    boolean i = false;
    if (isEmpty()) {
        incertLast(newKey);
    }
    while (!current.keyWord.equals(newSuperLink2.keyWord) && current != null) {
        if (current.keyWord.equals(newSuperLink2.keyWord)) {
            System.out.println("Not unique Item");
            i = false;
            break;
        } else {
            System.out.println("Unique Item");
            i = true;
        }
        current = current.next;
    }
    if (i = true) {
        return i;
    } else {
        return i;
    }
}

你可以用几行字解决你的问题:

  • 将值读入LinkedHashSet(设置保持插入顺序)
  • 转换结果new LinkedList<>(linkedHashSet)

相关内容

  • 没有找到相关文章

最新更新