1

に示すように、次のメソッドを使用してこのスタック クラスを作成しています。

 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 は [here][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 とコレクションが苦手で、課題の提出がかなり遅れています。ヘルプ/指示をいただければ幸いです。

4

2 に答える 2

3
ISortableStack<E> s = new ISortableStack(5); //Cannot instatiate ISORTABLESTACK

ISortableStackインターフェイス(メソッドのシグネチャを指定しますが、それらのメソッドに含まれるコードは指定しません) であるため、それ自体をインスタンス化することはできません。代わりに、具象実装クラスを使用してみてください。

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

inE型パラメーターSortableStackです。これは、のような特定のクラスのプレースホルダーです。このクラスのユーザーとして指定する代わりに、このインスタンスのマップ先をコンパイラに伝える必要があります。スタックに文字を保持する必要があるように見えるので、実際に必要なのは次のとおりです。StringEE

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

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

chのメンバーである必要はありませんdemo

于 2011-08-22T19:33:52.633 に答える
0

その特定の行 ( ISortableStack<E> s = new ISortableStack(5);) では、いくつかの処理が行われています。

それらを 1 つずつ並べ替えてみましょう。

ISortableStack は生の型です。ジェネリック型 ISortableStack への参照はパラメーター化する必要があります

ここでの問題は、生の型を使用しようとしていることです。次のステップは、それをパラメータ化することです。

タイプ ISortableStack をインスタンス化できません

インターフェイスのインスタンスを作成しようとしています - もちろん失敗するはずです。代わりにクラスを使用してください。

非静的型 E への静的参照を作成できません

型パラメーターは、メソッドである静的コンテキストでは使用できませんmain

それ以外 - コードの一部が欠けているようです...

于 2011-08-22T19:44:55.463 に答える