无法将String强制转换为双向链接的列表节点

时间:2018-09-20 23:48:48

标签: java linked-list stack queue nodes

我在将String强制转换为我的方法之一方面遇到异常错误。我使用Singly linked list node not able to be cast as Integer作为参考,但似乎无法找出问题所在。我的主要方法由教授提供,我必须运行它并测试我的方法。 String s = test.dequeue();

发生了错误
public static void testQueue() {
        System.out.println("Test queues");
        Queue<String> test = new Queue<String>();
        test.enqueue("a");
        test.enqueue("b");
        System.out.println(test);
        test.enqueue("c");
        test.enqueue("d");
        test.enqueue("e");
        test.enqueue("f");
        System.out.println(test);
        String s = test.dequeue();
        System.out.println("dequeued " + s + ": " + test);
        test.enqueue("x");
        test.enqueue("y");
        test.enqueue("z");
        System.out.println(test);
        try {
            for (int i = 0; i < 10; i++) {
                s = test.dequeue();
                System.out.println("dequeued " + s + ": " + test);
            }
        }
        catch(QueueException ex) {
            System.out.println("EXCEPTION: " + ex);
        }
        test.enqueue("j");
        test.enqueue("k");
        test.enqueue("l");
        System.out.println("Final value: " + test);
    }

    // Test Stacks
    public static void testStack() {

        System.out.println("Test stacks");
        Stack<String> test = new Stack<String>();
        test.push("a");
        test.push("b");
        System.out.println(test);
        test.push("c");
        test.push("d");
        test.push("e");
        test.push("f");
        System.out.println(test);
        String s = test.pop();
        System.out.println("popped " + s + ": " + test);
        test.push("x");
        test.push("y");
        test.push("z");
        System.out.println(test);
        try{
            for (int i = 0; i < 10; i++) {
                s = test.pop();
                System.out.println("popped " + s + ": " + test);
            }
        }
        catch(StackException ex) {
            System.out.println("EXCEPTION: " + ex);
        }
        test.push("j");
        test.push("k");
        test.push("l");
        System.out.println("Final value: " + test);


    }

    public static void main(String[] args) {

        testQueue();
        testStack();
    }

队列方法也在下面。我正在使用我的LinkedList方法来调用我的函数。

public class Queue<T> implements QueueInterface<T> {
    LinkedList list;
    public Queue(){ //constructor
        list = new LinkedList();
    }

    public void enqueue(T data) { //add to the bottom of queue
        list.add(data, list.size);
    }


    public T dequeue() { //remove from top of queue
        Object result = (list.get(0));
        list.remove(0);
        return (T)result;
    }


    public int size() { //get the size of queue
        list.size();
        return 0;
    }


    public T peek() { //get the data on the top of queue
        list.get(0);
        return null;
    }
    public String toString() {
        return list.toString();
    }
}

2 个答案:

答案 0 :(得分:2)

在您的dequeue()方法中,您将返回一个Object类型,但是应该返回一个“ T”类型。您可以将代码修改如下。

public T dequeue() { //remove from top of queue
    return list.get(0);
}

或者您也可以将Object转换为T,在这种情况下为String

 public T dequeue() { //remove from top of queue
        Object result = (list.get(0));
        list.remove(0);
        return (T)result;
    }

答案 1 :(得分:0)

您可以简单地执行以下操作:

String s = (String) test.dequeue();

在您的示例中,它是String,因此您投射了一个String,但假设它是一个Integer,则可以使用:

Integer i = (Integer) test.dequeue();

但是最好按照@justnisar指出的方式进行。