【问题标题】:How does .get function with an ArrayList, does that Index become empty?.get 如何与 ArrayList 一起使用,该索引是否为空?
【发布时间】:2019-10-30 12:19:43
【问题描述】:

我正在编写一个具有ImageView'sArraylist 的程序。我正在使用.get() 从一个arraylist 中取出一个骰子imageview,然后将它添加到另一个Arraylist,这将显示所有被选中的骰子。我很困惑,因为使用 .get() 是否将其从原始 Arraylist 中删除?

ArrayList<ImageView> rolledhand=new ArrayList<>(5);
    Random rand = new Random();
    for(int i=0;i<5;i++)
    {
        int randomNum = rand.nextInt(6);
        rolledhand.add(diceingame.get(randomNum));
    }

    VBox diceRolled1=new VBox(rolledhand.get(0));
    VBox diceRolled2=new VBox(rolledhand.get(0));

在我上面的代码中,diceingameArrayList 已经添加了 6 个图像视图骰子。我随机选择一个并将其添加到我的rolledhand 数组列表中 5 次。当我尝试输出 rolledhand 的相同索引时,我的场景中只显示了一个,而不是两个相同的。


我不想删除它。我只是问,因为由于某种原因,如果它们来自diceingame 中的同一位置,我的程序不会显示两个骰子。

【问题讨论】:

  • 没有。 get() 只是 get,不删除任何内容。
  • 您的问题得到答案了吗?任何反馈都会对其他读者有所帮助。

标签: java arraylist imageview vbox hbox


【解决方案1】:

ArrayList#get() 不会删除任何内容。它只是gets 元素:

public E get(int index)

返回此列表中指定位置的元素。

ArrayList#get()

如果你想getremove元素在某个位置,请改用ArrayList#remove()

public E remove(int index)

删除此列表中指定位置的元素。将任何后续元素向左移动(从它们的索引中减去 1)。

ArrayList#remove()

或者,如果您想弹出元素(获取并删除第一个/最后一个元素),请使用QueueStack

[编辑]


根据Node 文档(ImageView 继承自),关于视图中仅显示一个元素的问题:

一个节点最多只能在场景图中的任何位置出现一次。具体来说,一个节点必须在以下所有情况中出现不超过一次:作为场景的根节点、父节点的子 ObservableList 或节点的剪辑。

...

如果程序将子节点添加到父节点(包括组、区域等)并且该节点已经是不同父节点的子节点或场景的根节点,则该节点会自动(并且静默)从其前父母。

【讨论】:

  • 如果您从列表中删除该元素,您可能还应该将参数的值减小为nextInt(6)
  • 我不想删除它。我只是想知道为什么我第二次尝试从卷起的手上输出相同的索引它不起作用。
  • @PaulAnthonyMorillo 因为 一个节点可能在场景图中的任何位置最多出现一次。,根据文档。请查看更新后的答案。
  • 是否有其他方法来制作副本? @安德烈亚斯
  • @PaulAnthonyMorillo 您应该使用相同的图像 src 实例化另一个 ImageView。 Afaik,没有其他正式的方式。
猜你喜欢
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 2020-02-23
相关资源
最近更新 更多