Java 如何在链接堆栈的实现中编写toString()和peek()函数?
我在每个代码块下面都有注释 输出为: 单个整数是size()方法 问题: 当我使用Java 如何在链接堆栈的实现中编写toString()和peek()函数?,java,Java,我在每个代码块下面都有注释 输出为: 单个整数是size()方法 问题: 当我使用peek()方法时,我似乎得到了一个地址,我认为我更愿意返回实际的节点。 我也不知道如何使用toString()方法从LinkedStack的节点获取对象以打印出来 它提供了一种有效的方法 无论你做什么,这些东西在现代硬件上都是没有效率的,所以不要担心:)-但这不是你的问题,所以让我们继续 您的LinearNode和LinearStack类工作得很好,但请注意,LinearNode完全是一个内部作业:LinearS
peek()
方法时,我似乎得到了一个地址,我认为我更愿意返回实际的节点。
我也不知道如何使用toString()
方法从LinkedStack的节点获取对象以打印出来
它提供了一种有效的方法
无论你做什么,这些东西在现代硬件上都是没有效率的,所以不要担心:)-但这不是你的问题,所以让我们继续
您的LinearNode和LinearStack类工作得很好,但请注意,LinearNode完全是一个内部作业:LinearStack生成它们并查询它们。事实上,您应该将LinearNode设置为非公共以突出显示这一事实。它是为了LinearStack的好处而存在的,其他代码与em没有任何关系。例如,如果有人我得到了对堆栈中LinearNode的引用,我可以调用.setNext
,并打破您的列表。例如,这不会神奇地更新节点所在的任何列表中的计数,或者我可能有多个堆栈对象,每个对象在某个位置都有相同的节点,如果您开始在一个堆栈中弹出,会造成非常奇怪的效果(因为这将与另一个堆栈混淆…而不更新计数)
这就是你在这里犯的所有错误:你有一堆LinearNode对象。堆栈是泛型的,它可以存储您希望它存储的任何内容,因此它尽职尽责地精确执行您的命令,并且在内部有一个LinearNode
。是的,那是一个节点中的一个节点。不是你想要的
所以,不要这样做:
String x = checker.next();
LinearNode<String> words = new LinearNode<String>(x);
stack.push(words);
String x = checker.next();
stack.push(x);
此外,您已将堆栈声明为“节点堆栈”。那是。。不是你想要的。你希望它是一堆字符串。再次强调,LinearNode
应该绝对不在主类中,它应该对所有代码都是不可见和不存在的。。除了需要它工作的LinearStack
。将其声明为LinearStack
import java.util.*;
public class Sentence {
public static void main(String[] args) {
String sentence;
//Takes in user input
Scanner userInput= new Scanner(System.in);
System.out.println("Please type in sentence.");
sentence=userInput.nextLine();
userInput.close();
//Instantiates a new LinkedStack which takes in type of LinearNode
LinkedStack <LinearNode> Stack=new LinkedStack <LinearNode>();
//Scanner that grabs each individual workd from string
Scanner checker = new Scanner(sentence);
while(checker.hasNext()) {
String x =checker.next();
LinearNode<String> words=new LinearNode<String>(x);
Stack.push(words); //pushes the new created node with the individual word ```x``` onto the ```Stack```
}
//other methods
System.out.println(Stack.size());
System.out.println("Emptiness: "+Stack.isEmpty());
System.out.println("we peek on "+Stack.peek());// not sure how to get the actual node
System.out.println("The to string method is: "+Stack.toString());//want this to work correctly
System.out.println("we pop "+Stack.pop());
System.out.println(Stack.size());
checker.close();
}
}
Please type in sentence.
Hello world
2
Emptiness: false
we peek on LinearNode@6f496d9f
we pop LinearNode@6f496d9f
1
String x = checker.next();
LinearNode<String> words = new LinearNode<String>(x);
stack.push(words);
String x = checker.next();
stack.push(x);