これは、スタック/キューの割り当てのための私の主な方法です。キューではエラーが発生し続けますが、スタックではエラーが発生します。スタッククラスは正常に動作しているようです。私は完全に行き詰まっています。 「タイプキューをインスタンス化できません」と表示されます。どんな助けでも大歓迎です!
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;
}
}
Java docsの 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
Javaでは、Queue
はインターフェースであり、Queue
を直接インスタンス化することはできません。ドキュメント here を参照してください。次のようなものを使用してください:
Queue<String> queue = new LinkedList<String>();
これは、キューがインターフェイスであるためです。 Oracleの仕様を調べて、インスタンス化できる具体的なクラスを調べてください。 リンク
Javaキューはインターフェースであり、インスタンス化することはできません。 Queueを実装する具象クラスが必要です。