Java:在shuffle中排除数组索引

时间:2013-10-14 10:53:40

标签: java collections arraylist

是否可以在shuffle中排除数组索引?

我对这个问题的见解:

   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)方法,认为它会起作用。我错过了哪一部分?

2 个答案:

答案 0 :(得分:14)

您可以尝试这样的事情:

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 :(得分:2)

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