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

}

オブジェクトの整数をシャッフルするにはどうすればよいですか: データ. したがって、文字列は同じ位置に留まり、整数はシャッフルされます。

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 ライブラリからできる最善の方法は、最初に int のリストと文字列のリストの 2 つのリストに分割し、次に int のみをシャッフルして (Collections.shuffle を使用)、2 つのリストをデータの 1 つのリストに結合することです。

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

アクセサーと make を使用するのがベスト プラクティスであることに注意しgetN()setN(int)くださいData.n private

于 2012-09-18T22:50:51.727 に答える