Java 洗牌对象的整数<;整数,字符串>;在列表/阵列列表中 List List=new ArrayList(); 公共类数据{ 公共int n; 公共字符串p; 公共数据(整数N,字符串P){ n=n; p=p; } }
如何洗牌对象的整数:数据。因此字符串保持在相同的位置,整数被洗牌。可能需要自己做:Java 洗牌对象的整数<;整数,字符串>;在列表/阵列列表中 List List=new ArrayList(); 公共类数据{ 公共int n; 公共字符串p; 公共数据(整数N,字符串P){ n=n; p=p; } },java,list,shuffle,Java,List,Shuffle,如何洗牌对象的整数:数据。因此字符串保持在相同的位置,整数被洗牌。可能需要自己做: List<Data> list = new ArrayList<Data>(); public class Data{ public int n; public String p; public Data(int N, String P) { n = N; p = P; } } 从java库中可以做的最好的事情是首先将
List<Data> list = new ArrayList<Data>();
public class Data{
public int n;
public String p;
public Data(int N, String P) {
n = N;
p = P;
}
}
从java库中可以做的最好的事情是首先将它拆分为两个列表,一个是int,一个是string,然后只洗牌int(使用Collections.shuffle),然后将这两个列表组合回一个数据列表中,通过
list
循环,并将每个数据
对象的int
存储在一个单独的列表中。使用
洗牌此列表。循环浏览这个新的无序列表,并将list
的每个对应成员的n
字段设置为无序列表中新的随机int
。您可以使用如下方法:
for (int i = list.size(); i > 0; i--) {
int j = (int)(Math.random() * (i + 1));
int temp = list.get(i).n;
list.get(i).n = list.get(j).n;
list.get(j).n = temp;
}
listns=newarraylist(List.size());
用于(数据:列表){
ns.add(data.n);
}
收藏。洗牌(ns);
对于(int i=0;i
请注意,最佳做法是使用访问器
getN()
和setN(int)
并生成数据。n
私有
你说的混洗是什么意思?你的意思是你想让列表
中的元素的顺序完全乱序?不清楚你想要什么。将数据保留在原来的位置,但以某种方式洗牌它的编号?例如:List[1]=1,“A”List[2]=2,“F”List[3]=3,“J”shuffle->List[1]=2,“A”List[2]=1,“F”List[2]=3,“J”afaik没有用于此的API方法。你必须自己做。你提出的算法是什么?这看起来很有希望,但我现在的列表中有12 int/string。也就是说,它需要12个列表来完成这个任务?@user1621988不,你需要一个单独的列表来存储整数并将其洗牌。嗯,好的,我只是看不出“将列表中每个对应成员的n字段设置为洗牌列表中找到的新随机整数”是如何完成的。@user1621988是,他的回答基本上把我提到的内容写成了代码。
List<Integer> ns = new ArrayList<Integer>(list.size());
for (Data data : list) {
ns.add(data.n);
}
Collections.shuffle(ns);
for (int i = 0; i < list.size(); i++) {
Data data = list.get(i);
int newN = ns.get(i);
data.n = newN;
}