这是我的堆栈/队列分配的主要方法。我的队列一直出错,但不是我的堆栈。堆栈类似乎工作得很好。我完全卡住了。它说"无法实例化类型Queue"。非常感激任何的帮助!
public class mainMeth {
public static void main(String[] args) throws FileNotFoundException {
File Polish = new File("fILE4INPUT.txt");
File out = new File("outfile.txt");
Scanner f = new Scanner(Polish);
Queue inputQ = new Queue();
Stack stack2 = new Stack();
Queue outputQ = new Queue();
String word;
Character ch;
while (f.hasNext()) {
String myString = f.nextLine();
for (int count = 0; count < myString.length(); count++) {
ch = myString.charAt(count);
inputQ.addtoRear(ch);
}
while (!inputQ.ismtQ()) {
ch = inputQ.remfront();
if (isAlpha(ch)) {
// System.out.println(ch);
outputQ.addtoRear(ch);
} else {
if (isOperator(ch)) {
if (stack2.ismt()) {
stack2.push(ch);
} else {
if (valueOf(ch) > valueOf(stack2.top())) {
stack2.push(ch);
} else {
outputQ.addtoRear(stack2.pop());
stack2.push(ch);
}
}
}
}
}
while (!stack2.ismt()) {
outputQ.addtoRear(stack2.pop());
}
System.out.println(outputQ.toString() + "\n\n");
while (!outputQ.ismtQ()) {
outputQ.remfront();
}
}
}
public static boolean isAlpha(Character ch) {
boolean retVal = false;
if (ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z')
retVal = true;
return (retVal);
}
public static boolean isOperator(Character ch) {
boolean retVal = false;
if (ch == '+' || ch == '-' || ch == '/' || ch == '*')
retVal = true;
return (retVal);
}
public static int valueOf(Character ch) {
int retval = 0;
if (ch == '/' || ch == '*')
retval = 2;
else
retval = 1;
return retval;
}
}
答案 0 :(得分:13)
在Java文档的Interfaces部分:
接口无法实例化 - 它们只能通过实现 类或由其他接口扩展。
然后您无法直接实例化interface Queue<E>
。但是,您仍然可以通过接口类型引用实现Queue
接口的对象,例如:
// As I saw that you are adding Characters to your queue
Queue<Character> inputQ = new PriorityQueue<Character>();
您可以选择适当的实现来使用您的要求,这里列出了所有具体和已知的实施类java docs:
ArrayBlockingQueue
,ArrayDeque
,ConcurrentLinkedDeque
,ConcurrentLinkedQueue
,DelayQueue
,LinkedBlockingDeque
,LinkedBlockingQueue
,LinkedList
,LinkedTransferQueue
,PriorityBlockingQueue
,PriorityQueue
,SynchronousQueue
答案 1 :(得分:5)
在Java中,Queue
是一个接口,您无法直接实例化Queue
。请参阅文档here。请使用以下内容:
Queue<String> queue = new LinkedList<String>();
答案 2 :(得分:2)
这是因为队列是一个接口。查看oracle规范以完善可以实例化的具体类。 link
答案 3 :(得分:2)
Java Queue是一个接口,无法实例化。您需要一个实现Queue的具体类。