Java 如何在链接堆栈的实现中编写toString()和peek()函数?

Java 如何在链接堆栈的实现中编写toString()和peek()函数?,java,Java,我在每个代码块下面都有注释 输出为: 单个整数是size()方法 问题: 当我使用peek()方法时,我似乎得到了一个地址,我认为我更愿意返回实际的节点。 我也不知道如何使用toString()方法从LinkedStack的节点获取对象以打印出来 它提供了一种有效的方法 无论你做什么,这些东西在现代硬件上都是没有效率的,所以不要担心:)-但这不是你的问题,所以让我们继续 您的LinearNode和LinearStack类工作得很好,但请注意,LinearNode完全是一个内部作业:LinearS

我在每个代码块下面都有注释

输出为:

单个整数是size()方法

问题: 当我使用
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);