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