【问题标题】:how to shuffle an array without involving the first element? [closed]如何在不涉及第一个元素的情况下对数组进行洗牌? [关闭]
【发布时间】:2019-03-06 09:17:55
【问题描述】:

嗨,我想打乱一个列表,索引 0 是固定的,但另一个索引一直在改变,我的列表有数据模型类

sample =[Angelina Jolie.jpg, Ben Affleck.jpg, Bruce Willis.jpg, Michael Jackson.jpg, Miley Cyrus.jpg, Pharrell Williams.jpg, Rihanna.jpg, Ryan Gosling.jpg]

shuffled=[Angelina Jolie.jpg, Michael Jackson.jpg,Rihanna.jpg, Ryan Gosling.jpg, Miley Cyrus.jpg, Pharrell Williams.jpg, Ben Affleck.jpg, Bruce Willis.jpg ]

【问题讨论】:

  • 我不确定我是否理解,数组项是字符串还是对象?
  • 如果是对象,看这里programcreek.com/2012/02/…
  • 我的猜测是你的洗牌算法有一个错误,但不看代码很难说。
  • 您的问题不清楚。您是否在问如何在不涉及第一个元素的情况下对数组进行洗牌?或者你是在问我们为什么你的程序不打乱第一个元素?
  • 无论哪种情况,edit 您的问题并包含您的代码。

标签: java arrays random shuffle


【解决方案1】:

这是一个使用列表的简单示例:

String [] example = { "A", "B", "C", "D"};
List<String> items = Arrays.asList(example);
Collections.shuffle(items.subList(1, items.size()));
System.out.println(items);

重点是:您可以使用sublist() 方法创建一个视图,然后随机播放。当然,您可以使用 List 接口的toArray() 方法将您的列表转回数组。

【讨论】:

    【解决方案2】:

    使用 sublist() 创建一个新列表并对其进行打乱,因为新的子列表由主列表支持,所以主列表将被打乱到(第一个元素除外)

     List<String> subList = list.subList(1, list.size());
     Collections.shuffle(subList);
    

    原始列表现在从元素 1 开始改组。

    【讨论】:

    • @GhostCat 您的解决方案在没有临时变量的情况下更加优雅,并提供了投票。
    • 不客气 ;-)
    猜你喜欢
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2016-09-03
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多