背包、队列和栈_qq_45666842的博客-CSDN博客
在用Stack类(栈,栈是一种数据类型,详细介绍见上方链接)创建一个字符串的容器时,输出时总会输出null值。
public class BinaryOperation {
public static Stack binayoperation(int i) {
Stack stack = new Stack();
while(i>0) {
stack.push(i%2);
i/=2;
}
return stack;
}
public static void main(String[] args) {
Stack stk = binayoperation(50);
for(Integer n:stk) {
System.out.print(n);
}
}
}
输出结果如下
思考了好久,终于发现是创建的Stack
public class Stack- implements Iterable
- { //private Node node = new Node();//该链表对象的初始化是问题的根源,不应该初始化 ptivate Node node; private int N; //往Stack栈中添加元素的方法push void push(Item item) { Node oldNode = node; node = new Node();//node对象已经被创建出来,所以只需重新赋值即可,不可重新创建对象 node.item = item; node.next = oldNode; N++; } //从Stack栈中删除并返回元素的方法pop Item pop() { Item item = node.item; node = node.next; N--; return item; } // 栈中是否有元素 boolean isEmpty() { return(N==0); } //栈中元素的个数 int size() { return N; } //链表 class Node { Item item; Node next; } //迭代器的实现 public Iterator
- iterator(){ return new ListIterator(); } private class ListIterator implements Iterator
- { private Node current = node; public boolean hasNext() {return current!=null;} public Item next() { Item item=current.item; current = current.next; return item; } public void remove() {} }
Node类的对象有两个成员变量,一个是item,一个是next
class Node {
Item item;
Node next;
}
当只创建Node类的对象node,而不初始化时,node为null。
Node node;
但是当创建了Node类的对象并且初始化后,内存为node分配了空间存放其item,next成员
由此可见,虽然其item,next都为null,但是node本身时存在的,可以被处理输出。
链表中仅有两个值,却有三个节点。因此,在本例中,对象应该先创建,需要时再初始化。



