21

This is my main method for a stacks/queues assignment. I keep getting an error with my queue, but not my Stack. The stack class seems to be working just fine. I'm completely stuck. It says "cannot instantiate type Queue". Any help would be most appreciated!

 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;
        }


 }      
Shuijiao
  • 211
  • 1
  • 2
  • 3
  • Tagging the question with the correct language might help you get some answers. – infused Feb 21 '15 at 03:04
  • What is the actual class (import statement) for Queue? If it is just the Java Queue interface it cannot be instantiated because it is an Interface. – Astra Bear Feb 21 '15 at 03:12

4 Answers4

21

In the Interfaces section of the Java docs:

Interfaces cannot be instantiated—they can only be implemented by classes or extended by other interfaces.

Then you can't directly instantiate the interface Queue<E>. But, you still can refer to an object that implements the Queue interface by the type of the interface, like:

// As I saw that you are adding Characters to your queue
Queue<Character> inputQ = new PriorityQueue<Character>();

You can chose the adequate implementation to use regarding your requirements, here is a list of all concrete and known implementing Classes from it's java docs:

ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList, LinkedTransferQueue, PriorityBlockingQueue, PriorityQueue, SynchronousQueue

Tarik
  • 4,961
  • 3
  • 36
  • 67
11

In Java, Queue is an interface, you can't instantiate Queue directly. See the documentation here. Please use something like this:

Queue<String> queue = new LinkedList<String>();
Tachyon
  • 452
  • 7
  • 19
3

that is because queue is an interface. check out the oracle specs to fine the a concrete class that can be instantiated. link

3

Java Queue is an interface and cannot be instatiated. You need a concrete class that implements Queue.

Astra Bear
  • 2,646
  • 1
  • 20
  • 27