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

}

我怎样才能洗牌对象的整数:数据。所以 String 保持在相同的位置,并且 Integer 被打乱了。

4

3 回答 3

3

循环遍历每个对象list并将其存储在单独的列表中。使用 随机播放此列表。循环遍历这个新的混洗列表,并将每个相应成员的字段设置为在混洗列表中找到的新随机数。intDataCollections.shuffle(...)nlistint

于 2012-09-18T22:49:32.240 回答
0

可能必须自己做:

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

你可以从java库中做的最好的事情是首先将它分成两个列表,一个整数和一个字符串,然后只打乱整数(使用Collections.shuffle),然后将两个列表组合回一个数据列表

于 2012-09-18T22:46:33.153 回答
0

你可以使用这样的东西:

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

请注意,最好使用访问器getN()setN(int)make Data.n private

于 2012-09-18T22:50:51.727 回答