Stacks の ArrayList があり、Stacks の 1 つに要素を追加し、各 Stacks のインデックスを出力するリストを反復処理します。
次に、前の Stack から要素を削除して次の Stack に追加し、各 Stack のインデックスを出力して、ArrayList 内のすべての Stack についてこれを続けます。
ただし、いずれかのスタックが空の場合、ArrayList 内の各スタックのインデックスを取得する際に非常に異常な動作が発生します。空でないスタックには正しいインデックス値が含まれますが、空のスタックには正しくないインデックス値が含まれます。
さらに、要素を含むスタックがインデックス 0 にある場合、他のすべてのインデックス値は 1 になるようです。要素を含むスタックが他のインデックスにある場合、正しいインデックス値と他のすべてのインデックス値が含まれます。インデックス値は 0 になります。
これが私のコードです:
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
...そしてここに出力があります(3つのスタックの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