Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 洗牌对象的整数<;整数,字符串>;在列表/阵列列表中 List List=new ArrayList(); 公共类数据{ 公共int n; 公共字符串p; 公共数据(整数N,字符串P){ n=n; p=p; } }_Java_List_Shuffle - Fatal编程技术网

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