簡體   English   中英

無法將String強制轉換為雙向鏈接的列表節點

[英]unable to cast String to a doubly linked list node

我在將String強制轉換為我的方法之一方面遇到異常錯誤。 我正在使用無法Singly鏈表節點轉換為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();
    }
}

在您的dequeue()方法中,您將返回一個Object類型,但是應該返回一個“ T”類型。 您可以將代碼修改為以下內容。

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

或者您也可以將對象類型轉換為T,在這種情況下為String

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

您可以簡單地做到這一點:

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

在您的示例中,它是String因此我們轉換了一個String ,但是假設它是一個Integer ,可以使用:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM