Java 将令牌插入到双链接列表中

Java 将令牌插入到双链接列表中,java,stringtokenizer,doubly-linked-list,Java,Stringtokenizer,Doubly Linked List,我试图通过标记一个数学表达式并将其放入我在实验室作业中创建的双链接列表来存储它。当我在交实验室之前进行测试时,我在列表中实现的insert方法工作得非常好,但是当我在插入表达式的标记后打印列表的内容时,一些标记丢失了。我知道字符串标记器正在工作,因为我让它打印所有标记,它们都显示得很好 字符串标记器如何标记字符串,从而阻止我将其作为通用对象插入到链接列表中?我觉得这里有些行为我不知道 为便于参考,包含标记字符串并将其插入列表的方法的类: import java.io.File; import j

我试图通过标记一个数学表达式并将其放入我在实验室作业中创建的双链接列表来存储它。当我在交实验室之前进行测试时,我在列表中实现的insert方法工作得非常好,但是当我在插入表达式的标记后打印列表的内容时,一些标记丢失了。我知道字符串标记器正在工作,因为我让它打印所有标记,它们都显示得很好

字符串标记器如何标记字符串,从而阻止我将其作为通用对象插入到链接列表中?我觉得这里有些行为我不知道

为便于参考,包含标记字符串并将其插入列表的方法的类:

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:或者至少列表的打印不正确

逻辑看起来不错,您是否尝试过通过IDE调试它?字符串标记器返回一个字符串。没有理由不能将字符串添加到自定义列表中。Ummm..idk如何做:/Intro comp sci学生和allI强烈建议学习如何通过IDE进行调试。如果您使用的是Eclipse,这是一个很好的解决方案。它允许在运行时获取所有变量值,并能够暂停您的程序。如果您没有时间学习使用源代码级调试器,传统的解决方案是将打印输出插入到您的程序中,显示键值和决策;这也会让你“看着它运行”,让你看到它偏离轨道的地方。最后一行的末尾有换行符吗?