Java 对于类型InputStream错误,未定义方法isEmpty()
我正在尝试得到链表实现的堆栈pop算法。这是完整的代码。代码实际上来自Coursera中的课程算法第1部分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
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。虽然这条线只创建了一条线,但它在其使用范围之外是可见的。是的,它的使用方式肯定与你使用它的方式相同,但人是不可预测的!我以前肯定做过,以后也会继续,值得一提的是:)。