Java 通用堆栈方法

Java 通用堆栈方法,java,generics,methods,stack,static-typing,Java,Generics,Methods,Stack,Static Typing,我使用以下方法创建这个堆栈类,如图所示 import java.util.ArrayList; import java.util.EmptyStackException; public class SortableStack<E extends Comparable<E>> implements ISortableStack<E> { private int N; private Nod

我使用以下方法创建这个堆栈类,如图所示

 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);
        }
    }`
import java.util.ArrayList;
导入java.util.EmptyStackException;
公共类SortableStack实现了ISortableStack{
私人int N;
私有节点优先;
私有类节点{
私人E;
私有节点下一步;
}
公共SortableStack(){
第一个=空;
N=0;
}
private ArrayList listOne=new ArrayList();
公共布尔值为空(){
返回first==null;
}
公共整数大小(){
返回N;
}
公共空间推送(E){
节点oldfirst=第一个;
第一个=新节点();
第一,e=e;
first.next=oldfirst;
N++;
}
公共E-pop(){
if(isEmpty())抛出新的RuntimeException(“堆栈下溢”);
E=first.E;//保存E以返回
first=first.next;//删除第一个节点
N--;
return e;//返回保存的e
}
公共电子元件(){
if(listOne.size()
现在,
SortableStack
中的
E
是一个类型参数:它是某个特定类的占位符,比如
String
。您不需要指定
E
作为该类的用户,而是需要告诉编译器该实例的
E
应该映射到什么。看起来堆栈需要保存字符,所以至少你真正想要的是:

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

char character;
while ( (character = (char)System.in.read()) != '\n') {
   //...
   s.push(character);
}
ISortableStack s=new SortableStack();
字符;
而((character=(char)System.in.read())!='\n'){
//...
s、 推(字);
}
您不需要
ch
成为该特定行的
demo

成员(
ISortableStack s=new ISortableStack(5);
)有几件事正在进行

让我们一个接一个地把它们分类:

ISortableStack是原始类型。对泛型类型的引用 应参数化ISortableStack

这里的问题是您正在尝试使用原始类型。下一步是将其参数化:

无法实例化类型ISortableStack

您正在尝试创建接口的实例-这当然会失败。请改用类

无法对非静态类型E进行静态引用

类型参数不能用于
main
方法所使用的任何静态上下文中


除此之外,您似乎缺少部分代码…

我想您是想编写ISortableStack s=new SortableStack();您在这里没有泛型问题,无法实例化接口。您只能实例化ISortableStack的实现。我知道这是一个Q+a站点,任何人都可以自由提问,但您不会通过让他人解决您的任务来学习如何编程。我希望您能从中学习回答。谢谢你的回答,德鲁。但是,我从这本书中学到的东西比从其他任何一本教科书中学到的都多。感谢@ZenMaster、@Mark Peters,甚至你给了我如此真挚的见解。就完成任务而言,我很高兴至少我自己也在努力解决它。好吧,如果你能做到这一点,请告诉我们在这次考试中,Yonathan。向Yoshiro问好。确保你在应该得到表扬的地方给予表扬。击败我:)@Yonathan除此之外,你还将遇到一个问题,因为你没有一个构造函数接受
int
。我肯定,我会的。有任何关于改进代码的建议吗?+1解释足够详细的答案,以便OP了解所发布代码的真正错误。我是否错过了排序表tack(int)构造函数?
ISortableStack<E> s = new ISortableStack(5); //Cannot instatiate ISORTABLESTACK
ISortableStack<E> s = new SortableStack<E>();
ISortableStack<Character> s = new SortableStack<Character>();

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