web-dev-qa-db-ja.com

タイプ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;
        }


 }      
13
Shuijiao

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

ArrayBlockingQueueArrayDequeConcurrentLinkedDequeConcurrentLinkedQueueDelayQueueLinkedBlockingDequeLinkedBlockingQueueLinkedListLinkedTransferQueuePriorityBlockingQueuePriorityQueueSynchronousQueue

14
Tarik

Javaでは、Queueはインターフェースであり、Queueを直接インスタンス化することはできません。ドキュメント here を参照してください。次のようなものを使用してください:

Queue<String> queue = new LinkedList<String>();
8
Tachyon

これは、キューがインターフェイスであるためです。 Oracleの仕様を調べて、インスタンス化できる具体的なクラスを調べてください。 リンク

2
CodingCodetta

Javaキューはインターフェースであり、インスタンス化することはできません。 Queueを実装する具象クラスが必要です。

2
Astra Bear