Java 对于类型InputStream错误,未定义方法isEmpty()

Java 对于类型InputStream错误,未定义方法isEmpty(),java,algorithm,stack,Java,Algorithm,Stack,我正在尝试得到链表实现的堆栈pop算法。这是完整的代码。代码实际上来自Coursera中的课程算法第1部分 public class LinkedStackOfString { private Node first = null; private class Node { String item; Node next; } public boolean isEmpty() { return first == nu

我正在尝试得到链表实现的堆栈pop算法。这是完整的代码。代码实际上来自Coursera中的课程算法第1部分

public class LinkedStackOfString {
    private Node first = null;
    private class Node {
        String item;
        Node next; 
    }

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

    public void push(String item) {
        Node oldfirst = first;
        first = new Node();
        first.item = item;
        first.next = oldfirst;
    }

    public String pop() {
        String item = first.item;
        first = first.next;
        return item;
    }


    public static void main(String[] args) {
        LinkedStackOfString stack = new LinkedStackOfString();
        while (!System.in.isEmpty())
        {
            String s = System.in.readString();
            if (s.equals("-")) System.out.println(stack.pop());
            else stack.push(s);
        }
    }
}
我把完整的错误陈述。我收到如下错误消息:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    The method isEmpty() is undefined for the type InputStream
    The method readString() is undefined for the type InputStream

    at linkedList/linkedList.LinkedStackOfString.main(LinkedStackOfString.java:30)

谁能解释一下,发生了什么事?我不熟悉Java

编辑;您试图从扫描仪对象获取输入,这就是为什么要引用System.in。您需要使用System.in作为InputStream创建新的扫描仪对象

publicstaticvoidmain(字符串[]args){
LinkedStackOfsString堆栈=新LinkedStackOfsString();
扫描仪=新的扫描仪(System.in);
while(scanner.hasNext()){
字符串输入=scanner.next();
if(输入。等于(“-”){
字符串popped=stack.pop();
System.out.println(String.format(“弹出值为%s.”,弹出));
}否则{
stack.push(输入);
}
}
}

我想您需要一个不断向堆栈添加元素的程序。我建议更改
main()
方法,如下所示

public static void main(String[] args) {
    LinkedStackOfString stack = new LinkedStackOfString();

    String line ;
    Scanner in = new Scanner(System.in);
    while( (line=in.nextLine() )!= "N"){
      if (line.equals("-")){
        System.out.println(stack.pop());
      }
      else {
        stack.push(line);
      }
    }
  }

这本质上意味着用户应该继续键入她想要添加到堆栈中的任何内容,并在她想要
pop
和打印顶部元素时输入
-
。用户可以输入
N
当她想要结束这一过程时

我建议先学习java基础知识和面向对象的设计,然后深入研究算法..另外,我建议使用智能java IDE,它将对您的学习过程有很大帮助。
系统中的
是一个
输入流
,它没有方法
isEmpty()
。我认为OP正在尝试从控制台读取输入命令。另外,在他的
LinkedStackOfString
上没有这样的方法
readString
。是的,我认为readString()应该是节点或堆栈的名称。pop()。我想是吧。这是很有可能的!我会编辑的,干得好!我唯一要注意的是不必要地创建了本地成员行,该行在每个循环中都会重新初始化。只需在while循环的范围内创建一个本地成员,以确保没有超出其所需范围的意外访问。是的,valid point@Jason。虽然这条线只创建了一条线,但它在其使用范围之外是可见的。是的,它的使用方式肯定与你使用它的方式相同,但人是不可预测的!我以前肯定做过,以后也会继续,值得一提的是:)。