1

私は私が持っている与えられたセットからユニークなメンバーのチームを作ろうとしています。これは私がこれまでに持っているものです。

import java.util.*;
import java.lang.*;

class Main
{
   public static void main (String[] args) throws java.lang.Exception
   {
        /* Putting all team-mates in HashMap */

        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("a", 1);
        map.put("b", 2);
        map.put("c", 3);
        map.put("d", 4);

        /* Printing out the random name and the Unique number with it*/

        List<Integer> valuesList = new ArrayList<Integer>(map.values());
        List<String> keyList = new ArrayList<String>(map.keySet());
        System.out.println("The Team members are :");
        for (int i = 0; i < 3; i++)
        {
            int randomIndex = new Random().nextInt(valuesList.size());
            Integer randomValue = valuesList.get(randomIndex);
            String randomKey = keyList.get(randomIndex);
            System.out.println(randomValue+" "+randomKey);
        }
    }
}

これを実行すると、リストに重複が生じます。Collections.shuffle(valuesList)を使用しますか?

ありがとうございました。

4

2 に答える 2

1

同じ番号をランダムに2回取得できるので、そうするCollections.shuffle(...)必要があります。

于 2012-11-09T18:38:51.020 に答える
0

a、b、c、dがあなたが求めているすべてである場合、これは私がそれを行う方法です:

import java.util.*;
import java.lang.*;

class Main
{
   public static void main (String[] args) throws java.lang.Exception
   {
        /* Putting all team-mates in a List*/

        List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");

        /* Printing out the random name */

        System.out.println("The Team members are :");
        for(int i = 0; i < 3; i++)
        {
            int randomIndex = new Random().nextInt(list.size());
            //Integer randomValue = valuesList.get(randomIndex);
            String randomValue = list.remove(randomIndex);
            //String randomKey = keyList.get(randomIndex);
            System.out.println(randomValue);
        }
    }
}

選択した要素をリストから削除すると、それらが再表示されないようになります。

行も少なくなります。

于 2012-11-09T18:45:16.490 に答える