我在将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();
}
}
答案 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指出的方式进行。