gpt4 book ai didi

java - 在堆栈的 ArrayList 中,如果堆栈为空,为什么索引不正确?

转载 作者:行者123 更新时间:2023-11-29 06:38:53 26 4
gpt4 key购买 nike


我有一个 Stacks 的 ArrayList,在其中我将一个元素添加到其中一个 Stacks 并遍历列表以打印每个 Stack 的索引。

然后我从前一个 Stack 中删除元素,将其添加到下一个 Stack,打印每个 Stack 的索引,并对 ArrayList 中的所有 Stack 继续此操作。

但是,当任何 Stack 为空时,在获取 ArrayList 中每个 Stack 的索引时会出现非常不寻常的行为。 为空的堆栈将具有正确的索引值,而为空的堆栈将具有不正确的索引值指标值。

此外,似乎如果包含元素的 Stack 位于索引 0,则所有其他索引值将为 1。如果包含元素的 Stack 位于任何其他索引,它将具有正确的索引值和所有其他索引值将为 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


...这是输出(对于三个堆栈的 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


最佳答案

得到错误索引号的原因与 indexOf 在 List 中的实现方式有关。在它下面调用 Stack.equals()。这决定了 Stacks 在元素方面是否相等。当您使用空堆栈调用 list.indexOf 时,它将返回列表中第一个空堆栈的索引。

关于java - 在堆栈的 ArrayList 中,如果堆栈为空,为什么索引不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15591476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com