我有一個堆棧的ArrayList,其中我添加一個元素到一個堆棧,並遍歷列表打印每個堆棧的索引。
然後,我從前一個堆棧中刪除該元素,將其添加到下一個堆棧,打印每個堆棧的索引,然後繼續處理ArrayList中的所有堆棧。
但是,當任何堆棧爲空時,在獲取ArrayList中每個堆棧的索引時會出現非常不尋常的行爲。這是不空堆棧將有正確的索引值,而棧是是空將有不正確的索引值。
此外,如果包含一個或多個元素的堆棧位於索引0處,則所有其他索引值將爲1.如果包含元素的堆棧位於任何其他索引處,則它將具有正確的索引值和所有其他指數值將是0
在堆棧的ArrayList中,如果堆棧爲空,爲什麼索引不正確?
這裏是我的代碼:
import java.util.List;
import java.util.Stack;
import java.util.ArrayList;
public class ListOfStacks {
// instance variables:
List<Stack<Integer>> stacks;
private static final int NUMBER_OF_STACKS = 3;
// constructor:
ListOfStacks() {
this.stacks = new ArrayList<Stack<Integer>>(NUMBER_OF_STACKS);
// adding the stacks to the list here:
for (int i = 0; i < NUMBER_OF_STACKS; i++) {
this.stacks.add(new Stack<Integer>());
}
}
// instance methods:
void addElement(int stackIndex, int element) {
this.stacks.get(stackIndex).add(element);
}
void removeElement(int stackIndex) {
this.stacks.get(stackIndex).pop();
}
void printIndexes(int stackIndex, int element) {
System.out.printf("The stack at index %d now contains %d" +
"(the other stacks are empty):%n", stackIndex, element);
for (Stack<Integer> stack : this.stacks) {
System.out.printf("index %d%n", this.stacks.indexOf(stack));
}
System.out.println();
}
// main method:
public static void main(String[] args) {
ListOfStacks list = new ListOfStacks();
int index = 0, number = 5;
// adding the number 5 to the stack at index 0:
list.addElement(index, number);
list.printIndexes(index, number);
// now removing that element, and adding it to the stack at index 1:
list.removeElement(index++);
list.addElement(index, number);
list.printIndexes(index, number);
// now removing that element, and adding it to the stack at index 2:
list.removeElement(index++);
list.addElement(index, number);
list.printIndexes(index, number);
}
} // end of ListOfStacks
...這裏是輸出(三棧的ArrayList):
The stack at index 0 now contains 5 (the other stacks are empty):
index 0
index 1
index 1
The stack at index 1 now contains 5 (the other stacks are empty):
index 0
index 1
index 0
The stack at index 2 now contains 5 (the other stacks are empty):
index 0
index 0
index 2
感謝@DeltaLima的幫助,那麼如何才能實現具有空棧的「正常」索引行爲? – 2013-03-23 20:41:31
那麼......沒有關於你想要達到的東西的更多知識,這有點難以回答。我想知道列表的選擇是否正確。這裏不是一個簡單的數組嗎? – DeltaLima 2013-03-23 20:48:38
感謝@DeltaLima,我曾嘗試使用堆棧的數組之前,但有幾個錯誤(請參閱:http://stackoverflow.com/questions/15530118/how-can-i-instantiate-an-array-of-stacks- of-type/15530140#comment22001592_15530140)。我的目的是創建一個合適的結構來解決河內塔問題。 – 2013-03-23 20:56:38