在java中分配数组中的随机数(非重复)

时间:2015-11-08 16:09:02

标签: java arrays

我正在尝试建立一个交易或不交易的游戏。我需要为每个案例分配一个货币价值。我想知道这是否可能,如果可能,如何。我会设置2个数组,案例编号(1-26)和不同值的钱(我在开头设置的1到1,000,000之间的具体数字)。然后,我想从数组中取出一个随机值并在数组中为其赋值,但也要检查以确保它不存储在另一个案例变量中。

int cases[]=new int[26];
int money = {1,2,,5,10,25,50,75,100,200,300,400,...};

存入金钱的每一个值都只使用一次。 每个案例都会被分配一个且只有一个值。

2 个答案:

答案 0 :(得分:4)

改为使用ArrayList。

ArrayList<Integer> money = ....;

for (int i = 0; i < 26; i++){
    int pick = (int)(Math.random() * money.size());
    cases[i] = money.remove(pick);
}

但是,如果您要使用ArrayList,您也可以利用Collections中的大量方法,例如Collections#shuffle。根据文档,

  

使用默认的随机源随机置换指定的列表。所有排列都以大致相等的可能性发生。

然后您可以使用如下方法:

ArrayList<Integer> money = ....;
Collections.shuffle(money);
//money is now functionally what `cases` used to be

答案 1 :(得分:0)

你应该在money [] array

中至少有26个值
    int cases[]=new int[26];
    int[] money = {1,2,5,10,25,50,75,100,200,300,400....};
    Random random = new Random();
    int index = 0;
    firstLoop:
    while(cases[25]==0){
        int randomChosenIndex = random.nextInt(money.length);
        int randomChosenValueFromMoney = money[randomChosenIndex];
        for (int i = 0; i < index; i++) {
            if (cases[i]==randomChosenValueFromMoney) {
                continue firstLoop;
            }
        }
        cases[index++] = randomChosenValueFromMoney;
    }