невозможно привести String к узлу двусвязного списка - PullRequest
0 голосов
/ 21 сентября 2018

У меня возникла ошибка исключения в отношении приведения String к одному из моих методов.Я использовал Узел односвязного списка, который не может быть приведен как 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 голосов
/ 21 сентября 2018

Вы можете просто сделать это:

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

В вашем примере это было String, поэтому вы бросили String, но предположим, что это Integer, который вы можете использовать:

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

Но лучше сделать так, как указал @justnisar.

0 голосов
/ 21 сентября 2018

В вашем методе 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...