【问题标题】:How to remove an element and add it at the end of an ArrayList?如何删除元素并将其添加到 ArrayList 的末尾?
【发布时间】:2014-12-02 07:48:47
【问题描述】:

我是 Java 初学者。我正在尝试为我的扑克游戏 java 代码创建一个随机播放方法。它应该返回 52 张牌,洗牌。说明告诉我使用 math.random 删除一张卡片并将其返回到 ArrayList 的末尾,然后执行 500 次以将其洗牌。

我很困惑如何将其添加回来。这就是我到目前为止所拥有的一切......谢谢!

  public void shuffle()
  {

     int x = (int)(52 * Math.random());
     myDeck.remove(x);

  }

顺便说一下,myDeck 是 ArrayList 名称。

 ArrayList<Card> myDeck; 

【问题讨论】:

  • 500 次”在哪里?在哪里尝试“在 ArrayList 末尾返回它?”
  • 我用于(int i=0; i 类型的方法 add(int, Card) 不适用于参数 (int)"
  • @Oninez 见my answer。需要将remove()的结果存储起来再添加。
  • 从理论上讲,不清楚为什么要在 0 - 51 之间选择 500 次。为什么不为(int i=0;i
  • @Duncan,想想只运行 OP 方法 52 次。实际上很可能 (36%) 顶牌将保持不变。在不到 2% 的洗牌结束时,它应该是第一张牌。一次又一次地重复这个过程会逐渐减少偏差,但不能消除它。我认为您可能需要数百万次模拟才能看到显着的不同,但我真正的意思是要多做 9 倍的工作以获得稍差的分布。我估计偏差为 0.0001%(500 次洗牌,从不接触卡片 0),我认为这在几乎所有应用程序中都可以忽略不计。这是一个理论笔记...

标签: java


【解决方案1】:

你需要存储remove()的结果:

Card card = myDeck.remove(x);

然后再次添加它,它会自动将它放在列表的末尾:

myDeck.add(card);

【讨论】:

  • 啊,太棒了!非常感谢,我一直在尝试找出如何制作一张新卡,它是我刚刚取出的卡,已经用了好几个小时了......再次感谢!
【解决方案2】:

简单,保存值,删除再重新添加。

Card y = myDeck.get(x)
myDeck.remove(x);
myDeck.add(y);

【讨论】:

  • remove() 返回之前在该位置的对象,因此您可以少写一行。
猜你喜欢
  • 2023-01-12
  • 2020-11-20
  • 2013-02-14
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
相关资源
最近更新 更多