【问题标题】:Java: Exclude array index in shuffleJava:在随机播放中排除数组索引
【发布时间】:2013-10-14 10:53:40
【问题描述】:

是否可以在随机播放中排除数组索引?

我对这个问题的见解:

   Array[0,1,2,3,4,5,6,7,8]
   Exclude Array index 2 and 7 in shuffle.
   Shuffle Array.
   Array[3,5,2,1,6,8,0,7,4]

这是我在洗牌时使用的:

List<Pokemon>list = Arrays.asList(pkm);
Collections.shuffle(list);

编辑:

谢谢,@Jhanvi!我研究了你的代码,它给了我一些想法。我尝试使用您的代码和@Rohit Jain 的代码并创建了一个示例:

import java.util.Arrays;

    import java.util.Collections;
    import java.util.List;
    import java.util.ArrayList;

public class Example {

 public static void main(String[]args){
    String[] x = {"a","b","c","d","e","f","g","h"};
    List<String> list = new ArrayList<String>(Arrays.asList(x));
    System.out.println("Before shuffling, ArrayList contains : " + list);
    Object obj = list.remove(7);
    Object obj1 = list.remove(2);
    Collections.shuffle(list);
    list.add(2, obj1);
    list.add(7, obj);
    System.out.println("After shuffling, ArrayList contains : " + list);        
 }     
}

令人讨厌的是它给了我一个错误: 在我的 list.add() 上都找不到符号方法 add(int,java.lang.Object)。

我检查了 List 是否存在 .add(int,Object) 方法,认为它会起作用。我错过了什么?

【问题讨论】:

  • 类似的问题,对于 Python,但同样的问题:Python: shuffling list, but keeping some elements frozen
  • 您已经以字符串格式获取了列表,并在列表中添加了应该为 int 格式的元素,您需要对其进行类型转换然后添加。 list.add(2, (String) obj1) 用这个替换你的添加。

标签: java collections arraylist


【解决方案1】:

你可以试试这样的:

ArrayList arrayList = new ArrayList();
arrayList.add(0);
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(4);
arrayList.add(5);
arrayList.add(6);
arrayList.add(7);
System.out.println("Before shuffling, ArrayList contains : " + arrayList);
Object obj = arrayList.remove(7); // remove by index!
Object obj1 = arrayList.remove(2);
Collections.shuffle(arrayList);
arrayList.add(2, obj1);
arrayList.add(7, obj);
System.out.println("After shuffling, ArrayList contains : " + arrayList);

【讨论】:

  • +1 聪明的方法。可以通过使用Map 以索引作为键,并将值作为索引处的值来做得更好。此外,使用参数化的ArrayList&lt;Integer&gt;
  • 对不起我之前的评论。 remove() 方法不返回元素,而是将元素移除。之前很困惑,所以删除了评论。你以前的方法很好。再次为那个误导性的评论道歉。
  • @RohitJain: remove() 如果您按索引删除,则返回该元素。在这种情况下有点令人困惑,因为这些值看起来像索引,但 int 应该绑定到 Integer
  • @AaronDigulla ,在删除时我们必须减少索引,因为已经从数组中删除了 1 个元素,因此进行了编辑。
  • @Jhanvi:你是对的。在这种情况下,您可以从末尾删除(即前 7 个,然后是 2 个)。
【解决方案2】:

您可以自己创建一个 shuffle:只需随机选择两个索引,确保排除要排除的索引,然后交换这些位置的数组元素。重复足够的次数。

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 2016-07-16
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多