我正在尝试通过标记化数学表达式并将其放入我在实验室作业中创建的双向链表中来存储数学表达式。 我在实验室提交之前进行测试时,我在列表中实现的插入方法工作得很好,但是当我在插入表达式的标记后打印列表的内容时,缺少一些标记。 我知道字符串分词器正在工作,因为我让它打印了所有标记,它们都显示得很好。
字符串分词器如何标记字符串,阻止我将它们作为通用对象插入到链接列表中? 我觉得这里有一些我不知道的行为。
作为参考,包含标记字符串并将其插入列表的方法的类:
import java.io.File;
import java.io.FileNotFoundException;
import java.lang.*;
import java.util.*;
public class Calculator {
DoubleLinkedListTest infixstorage;
public Calculator(){
infixstorage = new DoubleLinkedListTest();
}
public static DoubleLinkedListTest ReadInFile(String path){
File file = new File(path);
DoubleLinkedListTest list = new DoubleLinkedListTest();
try {
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
StringTokenizer st = new StringTokenizer(line);
while (st.hasMoreTokens()){
list.insert(st.nextToken());
}
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return list;
}
}
这是我的DoubleLinkedList的代码:
public class DoubleLinkedListTest implements DoubleLinkedList {
private DoubleNode head;
private DoubleNode tail;
public DoubleLinkedListTest(){
head = new DoubleNode();
tail = new DoubleNode();
head.next = tail;
tail.prev = head;
}
public void insert(Object x){
if (lookup(x) == false){
if (head.data == null){
head.data = x;
}
else if (head.data != null && tail.data == null){
tail.data = x;
}
else{
DoubleNode NewNode = new DoubleNode();
NewNode.data = x;
NewNode.next = null;
NewNode.prev = tail;
tail.next = NewNode;
tail = NewNode;
}
}
}
//Runtime of insert method will be n, where n is the number of nodes
public void delete(Object x){
if (this.lookup(x).equals(true)){
if(x.equals(head.data)){
head.next.prev = null;
head = head.next;
}
else{
DoubleNode temp = head;
while(temp.next != null){
if (temp.next.next == null && (temp.next).data.equals(x)){
temp.next.prev = null;
temp.next = null;
break;
}
if ((temp.next).data.equals(x)){
temp.next.next.prev = temp;
temp.next = (temp.next).next;
break;
}
else{
temp = temp.next;
}
}
}
}
}
public Object lookup(Object x){
Boolean search = false;
if (x.equals(head.data)){
search = true;
}
else{
DoubleNode temp = head;
while (temp.next != null){
if (x.equals(temp.data)){
search = true;
break;
}
if (temp.next.next == null && x.equals(temp.next.data)){
search = true;
break;
}
else{
temp = temp.next;
}
}
}
return search;
}
public boolean isEmpty(){
if(head.next == tail && tail.prev == head)
return true;
else
return false;
}
public void printList(){
DoubleNode temp = head;
System.out.println(temp.data + " ");
while (temp.next != null){
temp = temp.next;
System.out.println(temp.data + " ");
}
}
public void printListRev(){
System.out.print(tail.data + " ");
while (tail.prev != head){
tail = tail.prev;
printList();
}
}
}
我想通了。 扫描程序一次读取文件的多行。 我以为有一行,但它只是在 txt 文件中以这种方式出现。 它实际上是三条线彼此相邻。
编辑:误报,删除其他行后,仍然错误地读取剩余行
编辑2:或者至少列表的打印不正确