【问题标题】:Shuffle some elements of the ArrayList, while fixing the rest and shuffled elements must be shuffled until every element get different indexesShuffle ArrayList 的一些元素,同时修复其余的,shuffle 的元素必须shuffle,直到每个元素得到不同的索引
【发布时间】:2014-07-16 05:13:22
【问题描述】:

如何只打乱ArrayList中的一些元素并修复剩余的元素 我有一个ArrayList,其中包含锁定和解锁的值我想只洗牌解锁的元素并修复锁定的元素。

我关注了这个Java: Exclude array index in shuffle 现在我的未锁定数组列表被打乱,但我注意到一些元素在打乱时获得相同的索引我的要求是每个元素在打乱后必须在数组列表中获得不同的索引,即原始数组列表元素索引不能与打乱匹配 数组列表元素索引

【问题讨论】:

  • 这篇文章可能会有所帮助:stackoverflow.com/questions/19358631/…
  • 感谢链接帮助了我,但我想洗牌数组列表,没有项目留在原来的位置
  • 我不明白。您的问题说您“只想洗牌未锁定的元素并修复锁定的元素。”如果您想随机播放“没有项目保留在其原始位置”,请在整个列表中使用Collections.shuffle()
  • 我只想洗牌未锁定的元素并修复锁定的元素,但解锁元素的洗牌必须以这样一种方式完成,即使经过多次洗牌,它们也不能保持在原来的位置,例如如果 A洗牌后原来的位置是2,即使经过多次洗牌,也不能得到第二位
  • 您应该编辑您的问题以指定该要求。您还可以指定仅解锁一个元素时应该发生的情况。

标签: java android


【解决方案1】:

假设你需要保持锁定项目的位置(索引)固定,你可以试试这个。 首先,您将所有未锁定项目保存在单独的 ArrayList 中。假设您的原始列表是项目

ArrayList<T> unLockedItems = new ArrayList<T>();
for(T item : items)
{
   if(!item.isLocked)
      unLockedItems.add(item);
}

现在你有了解锁物品的列表;

然后随机播放解锁的物品

Collections.shuffle(unLockedItems)

那么你已经用随机解锁的物品替换了最初的解锁物品

for(T item : items)
{
   if(!item.isLocked)
   {
      int pos = items.indexOf(item);
      items.remove(pos);
      items.add(pos, unLockedItem.get(O));
      unlockedItem.remove(0);
    }

}

【讨论】:

    猜你喜欢
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多