import java.util.*;
public class Stack {
private Vector items;
public Stack() {
items = new Vector(10);
}
public Object push(Object item) {
items.addElement(item);
return item;
}
public synchronized Object pop() {
int len = items.size();
Object obj = null;
if (len == 0)
throw new EmptyStackException();
obj = items.elementAt(len - 1);
items.removeElementAt(len - 1);
return obj;
}
public boolean isEmpty() {
if (items.size() == 0)
return true;
else
return false;
}
public int size() {
int len = items.size();
return len;
}
public Iterator iterator() {
return new StackIterator();
}
public class StackIterator extends Stack implements Iterator {
private Stack stack = new Stack();
public StackIterator(Stack stack) {
Iterator iterator = Stack.ListIterator();
while (iterator.hasNext()) {
this.stack.push(iterator.next());
}
}
public void remove() {
}
public boolean hasNext() {
return !stack.isEmpty();
}
public Object next() {
return stack.pop();
}
}
}
2007-01-12 18:30:44 · 1 個解答 · 發問者 ? 3 in 電腦與網際網路 ➔ 程式設計
請問你喔
如果用class Stack會覆蓋掉JAVA內建的嗎?
2007-01-13 12:53:23 · update #1
只多加了THIS就能跑了嗎?
為什麼要加THIS
return new StackIterator(this);
2007-01-13 12:55:23 · update #2
public class UseStack {
public static void main(String[] args) {
MyStack s = new MyStack();
StackIterator i = new StackIterator();
System.out.println(i.next());
}
}
2007-01-13 13:11:34 · update #3
請問
這樣寫有compile會過
不過沒有顯示出結果
我是哪裡錯了
2007-01-13 13:11:41 · update #4
那那那...
我該怎麼用Iterator記數STACK裡面的資料
2007-01-19 09:33:56 · update #5
請參考我的做法。由於原本類別 Stack 與 java.util.Stack 重覆,為了分辨清楚,我將其改為 MyStack
import java.util.*;
public class MyStack {
private Vector items;
public MyStack() {
items = new Vector(10);
}
public Object push(Object item) {
items.addElement(item);
return item;
}
public synchronized Object pop() {
int len = items.size();
Object obj = null;
if (len == 0)
throw new EmptyStackException();
obj = items.elementAt(len - 1);
items.removeElementAt(len - 1);
return obj;
}
public boolean isEmpty() {
if (items.size() == 0)
return true;
else
return false;
}
public int size() {
int len = items.size();
return len;
}
public Iterator iterator() {
return new StackIterator(this);
}
}
class StackIterator extends MyStack implements Iterator {
private MyStack stack = new MyStack();
public StackIterator(MyStack stack) {
Iterator iterator = stack.iterator();
while (iterator.hasNext()) {
this.stack.push(iterator.next());
}
}
public void remove() {
}
public boolean hasNext() {
return !stack.isEmpty();
}
public Object next() {
return stack.pop();
}
}
2007-01-18 10:06:43 補充:
如果用class Stack會覆蓋掉JAVA內建的嗎?
Ans: JVM 會優先用你寫的 Stack,除非在程式裡特別指定 java.util.Stack
只多加了THIS就能跑了嗎?為什麼要加THIS?
Ans: 這個 this 在你原本的程式碼就有了,並非我加上去的。
這樣寫有compile會過,不過沒有顯示出結果,我是哪裡錯了?
Ans: 你主要印出的是 i.next() 這一行,可是 i 所代表的 StackIterator 是空的,所以什麼都沒有,也就是印出空白。
2007-01-13 11:27:00 · answer #1 · answered by ? 7 · 0⤊ 0⤋