Java:在洗牌中排除数组索引

Java:在洗牌中排除数组索引,java,collections,arraylist,Java,Collections,Arraylist,是否可以在无序排列中排除数组索引 我对这个问题的看法是: 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); Listlist=Arrays.a

是否可以在无序排列中排除数组索引

我对这个问题的看法是:

   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);
Listlist=Arrays.asList(pkm);
集合。洗牌(列表);
编辑:

谢谢,@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);        
 }     
}
导入java.util.array;
导入java.util.Collections;
导入java.util.List;
导入java.util.ArrayList;
公开课范例{
公共静态void main(字符串[]args){
字符串[]x={“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”};
List List=newarraylist(Arrays.asList(x));
System.out.println(“洗牌前,ArrayList包含:“+list”);
Object obj=list.remove(7);
对象obj1=列表。删除(2);
集合。洗牌(列表);
列表。添加(2,obj1);
列表。添加(7,obj);
System.out.println(“洗牌后,ArrayList包含:“+list”);
}     
}
令人恼火的是,它给了我一个错误: 在my list.add()和my list.add()上都找不到符号方法add(int,java.lang.Object)


我检查了List是否存在一个
.add(int,Object)
方法,认为它可以工作。我错过了哪一部分?

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

您可以尝试以下方法:

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);

+一个聪明的方法。可以通过使用索引为键、值为索引处的值的
映射
来改进。另外,请使用参数化的
ArrayList
。很抱歉我之前的评论
remove()
方法不返回元素,而是获取要删除的元素。早些时候被弄糊涂了,所以删除了评论。你以前的方法很好。再次为这一误导性评论感到抱歉。@RohitJain:
remove()
如果按索引删除,则返回元素。在这种情况下有点混乱,因为值看起来像索引,但是
int
应该绑定到
Integer
@AaronDigulla上,在删除时我们必须减少索引,因为已经从数组中删除了1个元素,因此需要进行编辑。@Jhanvi:你说得对。在这种情况下,您可以从末尾删除(即,先删除7个,然后删除2个)。对于Python,类似的问题,但相同的问题是:您以字符串格式获取了列表,并且在列表中添加了应为int格式的元素,您需要对其进行类型转换,然后添加。添加(2,(字符串)obj1)将您的添加替换为此。