【问题标题】:unable to cast String to a doubly linked list node无法将字符串转换为双向链表节点
【发布时间】:2018-09-20 23:48:48
【问题描述】:

在将字符串转换为我的一种方法时出现异常错误。我使用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();
    }
}

【问题讨论】:

  • 错误在哪一行?
  • @Pritam Banerjee 抱歉,我知道它很难找到,它在 testQueue() String s = test.dequeue();

标签: java linked-list stack queue nodes


【解决方案1】:

在你的 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;
    }

【讨论】:

  • 出于某种原因,我删除了类型转换,但我已经尝试过该方法,但它没有用。有没有办法保留我的对象?
  • public T dequeue() { //remove from top of queue list.remove(0); return (T) list.get(0); } 我的 ide 说我必须对其进行类型转换,但无论如何它仍然无法正常工作?
  • @Jordles 您需要明确说明“不工作”的含义。结果不是你预期的吗?它是否抛出异常?如果有,有什么例外? (猜测一下,你 remove(0) 在你做 get(0) 之前的项目,所以 get() 不会返回正确的项目,如果只有一个项目,将返回 null - 可能导致 NullPointerException)
  • @Jordles 更正,它会抛出ArrayIndexOutOfBoundsException
  • @Tibrogargan 好的,所以问题出在我的 LinkedList 上,因为我的 get 方法返回的是节点而不是节点的值(因为我是 dum)。谢谢大家的帮助!
【解决方案2】:

你可以这样做:

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

在您的示例中,它是 String,所以我们投射了 String,但假设它是 Integer,您可以使用:

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

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

【讨论】:

  • 所以它什么也没做。我的 IDE 说将其转换为 String 是多余的
猜你喜欢
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
相关资源
最近更新 更多