Универсальные методы стеков - PullRequest
1 голос
/ 22 августа 2011

Я создаю этот класс стека с помощью следующих методов, как показано.

 import java.util.ArrayList;
    import java.util.EmptyStackException;


    public class SortableStack<E extends Comparable<E>> implements ISortableStack<E> {
        private int N;          
        private Node first;     


        private class Node {
            private E e;
            private Node next;
        }


        public SortableStack() {
            first = null;
            N = 0;
        }


    private ArrayList<E> listOne = new ArrayList<E>();



    public boolean isEmpty() {
            return first == null;
        }


        public int size() {
            return N;
        }
        public void push(E e) {
            Node oldfirst = first;
            first = new Node();
            first.e = e;
            first.next = oldfirst;
            N++;
        }
        public E pop() {
            if (isEmpty()) throw new RuntimeException("Stack underflow");
            E e = first.e;        // save e to return
            first = first.next;            // delete first node
            N--;
            return e;                   // return the saved e
        }


    public E peekMidElement() {
        if(listOne.size() <= 0){
        throw new EmptyStackException();
        }

        return listOne.get(listOne.size()/2);
        }

    public E peekHighestElement() {
        if(listOne.size() <= 0){
        throw new EmptyStackException();
        }

        return listOne.get(listOne.size() - 1);
        }

    public E peekLowestElement() {
        if(listOne.size() <= 0){
        throw new EmptyStackException();
        }

        return listOne.get(0);
        }
    }`

// Интерфейс ISortableStack [здесь] [1] (комментарии описывают необходимые сигнатуры методов).

[1]: http://stackoverflow.com/questions/7130901/java-stack-implementation

Теперь, когда я пытаюсь создать класс основного тела, как здесь:

import java.io.*;
public class ExhibitStack<E extends Comparable<E> > {

    E ch;
    public static void main(String[] args) throws IOException {
        ISortableStack<E> s = new ISortableStack(5); // Cannot instatiate ISORTABLESTACK
        ExhibitStack demo = new ExhibitStack();
        // Cannot make reference to a non static type
        while ((demo.ch = (E) System.in.read()) != '\n') {
            if (!s.full()) {
                s.push(demo.ch);
            }
        }
        while (!s.empty()) {
            System.out.print(s.pop());
        }

        System.out.println();
    }
}

Выдает ошибку в ISortableStack как:ссылка на нестатический тип.и не может установить ISORTABLESTACK

Я хотел бы создать управляемую меню программу с использованием интерфейса.Я плохо разбираюсь в Java GENERICS и в коллекциях и довольно поздно опоздал с выполнением задания.Любая помощь / указания будут высоко ценится.

Ответы [ 2 ]

3 голосов
/ 22 августа 2011
ISortableStack<E> s = new ISortableStack(5); //Cannot instatiate ISORTABLESTACK

ISortableStack - это интерфейс (он определяет сигнатуры методов, но не код, который идет в этих методах), и, таким образом, сам не может быть создан.Вместо этого попробуйте использовать конкретную реализацию класс:

ISortableStack<E> s = new SortableStack<E>();

Теперь E в SortableStack является параметром типа : это заполнитель для некоторых определенный класс, такой как String.Вместо указания E в качестве пользователя этого класса, вы должны указать компилятору, что E должно отображаться для этого экземпляра.Похоже, ваш стек должен содержать символы, поэтому вы действительно хотите:

ISortableStack<Character> s = new SortableStack<Character>();

char character;
while ( (character = (char)System.in.read()) != '\n') {
   //...
   s.push(character);
}

Вам не нужно ch, чтобы быть членом demo.

0 голосов
/ 22 августа 2011

В этой конкретной строке (ISortableStack<E> s = new ISortableStack(5);) происходит несколько вещей.

Давайте разберемся по очереди:

ISortableStack является необработанным типом. Ссылки на универсальный тип Параметр ISortableStack должен быть параметризован

проблема здесь в том, что вы пытаетесь использовать необработанный тип. Следующим шагом будет его параметризация:

Невозможно создать экземпляр типа ISortableStack

Вы пытаетесь создать экземпляр интерфейса - который, конечно, должен потерпеть неудачу. Вместо этого используйте класс.

Невозможно сделать статическую ссылку на нестатический тип E

Параметры типа нельзя использовать ни в одном статическом контексте, каков ваш метод main.

Кроме этого - кажется, вам не хватает части вашего кода ...

...